
我正在创建一个视图模型,其中的命令位于以某种方式使用/更新软件视图模型的属性上.我希望将VIEw Model的实例传递给VIEw Models属性上的Commands的构造函数.例如.
public Mainviewmodel{ public Mainviewmodel() { Customers = new ObservableCollection<Customerviewmodel>(); } [Depedency("LoadCommand")] public ICommand LoadCustomersCommand { get; set; } public ObservableCollection<Customerviewmodel> Customers { get; private set; }}public LoadCustomersCommand : ICommand{ public LoadCustomersCommand(Mainviewmodel mainviewmodel) { //Store vIEw model for later use } //... implementation}//Setup code in App.XamlIUnityContainer unityContainer = new UnityContainer();unityContainer.RegisterType<ICommand,LoadCommand>("LoadCommand");unityContainer.RegisterType<Mainviewmodel>(new ContainerControlledlifetimeManager()); 当我解析Mainviewmodel类时,我得到一个StackOverflow异常(如果Visual Studio完全回来的话).现在我希望Unity首先创建一个Mainviewmodel实例,因为它基本上是一个单例,然后查看VIEw Model的实例并创建在新创建的Mainviewmodel中传递的Command,但显然我错了.
有任何想法吗?
解决方法 这是 Circular References错误,正如它所说,开发人员有责任避免它.所以Mainviewmodel引用了对Mainviewmodel的反馈的LoadCustomersCommand – >堆栈溢出.所以你唯一能做的就是
public class Mainviewmodel{ public Mainviewmodel() { Customers = new ObservableCollection<Customerviewmodel>(); } //no dependency. public ICommand LoadCustomersCommand { get; set; } public ObservableCollection<Customerviewmodel> Customers { get; private set; }} 并解决你需要做以下事情
var mainModel = unityContainer.Resolve<Mainviewmodel>();mainModel.LoadCustomersCommand = unityContainer.Resolve<ICommand>("LoadCommand"); 总结 以上是内存溢出为你收集整理的c# – 使用Unity注入属性导致堆栈溢出全部内容,希望文章能够帮你解决c# – 使用Unity注入属性导致堆栈溢出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)