使用Unity和WPF时遇到了一些问题。场景是我有一个遵循MVVM设计模式的WPF应用程序。 A有一个名为ViewKDI的模块。在这个模块中,我有一个名为ViewKDIService的服务,ViewKDIService服务使用另一个名为UserService的服务。
每次加载ViewKDI模块时,我都希望Unity返回一个ViewKDIService和UserService的新实例。
我已将下面的内容放在shell引导程序中:
Container.RegisterType<IUserService, UserService>();
在ViewKDI模块中,我提出了以下内容:
Container.RegisterType<IViewKDIService, ViewKDIService>();
每次ViewKDI模块加载ViewKDIService时都会调用构造函数。但是,UserService构造函数仅在第一次调用时,这意味着我没有获得UserService的新实例。
我要求团结给我一个新的UserService实例,以便我可以与应用程序的其余部分分开管理这个会话。
有什么想法吗?
由于 费萨尔
答案 0 :(得分:2)
Unity的默认行为是每次请求一个对象时创建每个对象的新实例,因此您不应该看到此行为。
从我可以从源代码和MSDN文档中收集的内容(this是一个很好的阅读),您可以在注册类型时指定“生命周期管理器”对象,以告诉Unity应该如何构造类型和缓存。使用TransientLifetimeManager(基本上不进行缓存)将导致Unity每次重新创建类。所以试试这个:
Container.RegisterType<IUserService, UserService>(new TransientLifetimeManager());
...并查看每次是否创建新的UserService。