Wpf Unity返回新的服务实例

Wpf Unity返回新的服务实例,wpf,unity-container,Wpf,Unity Container,我在使用Unity和WPF时遇到了一些问题。场景是我有一个遵循MVVM设计模式的WPF应用程序。A有一个名为ViewKDI的模块。在这个模块中,我有一个名为ViewKDIService的服务,ViewKDIService服务使用另一个名为UserService的服务 每次加载模块ViewKDI时,我都希望Unity返回ViewKDIService和UserService的一个新实例 我已将以下内容放入shell引导程序: Container.RegisterType<IUserServic

我在使用Unity和WPF时遇到了一些问题。场景是我有一个遵循MVVM设计模式的WPF应用程序。A有一个名为ViewKDI的模块。在这个模块中,我有一个名为ViewKDIService的服务,ViewKDIService服务使用另一个名为UserService的服务

每次加载模块ViewKDI时,我都希望Unity返回ViewKDIService和UserService的一个新实例

我已将以下内容放入shell引导程序:

Container.RegisterType<IUserService, UserService>();
Container.RegisterType();
在ViewKDI模块中,我放置了以下内容:

Container.RegisterType<IViewKDIService, ViewKDIService>();
Container.RegisterType();
每次ViewKDI模块加载时,都会调用ViewKDIService构造函数。然而,UserService构造函数只是第一次被调用,这意味着我没有得到UserService的新实例

我需要unity也给我一个新的UserService实例,这样我就可以独立于应用程序的其余部分来管理这个会话

有什么想法吗

谢谢
Faisal

Unity的默认行为是每次请求一个对象时为每个对象创建一个新实例,因此您不应该看到这种行为

根据我从源代码和MSDN文档中收集到的信息(这是一个很好的读物),您可以在注册类型时指定一个“lifetime manager”对象,告诉Unity应该如何构造和缓存该类型。使用TransientLifetimeManager(本质上没有缓存)将导致Unity每次都重新创建类。所以试试这个:

Container.RegisterType<IUserService, UserService>(new TransientLifetimeManager());
Container.RegisterType(新的TransientLifetimeManager());

。。。并查看它是否每次都创建一个新的UserService。

能否提供有关何时解析每种类型的详细信息?IUserService是ViewKDIService的依赖项吗?我没有显式调用resolve,我只是将接口放在ViewModel的构造函数中,并让Unity解析它们。IUserService不依赖于IViewKDIService。了解IUserService和IViewKDIService被注入到哪些对象中以了解它们的生存期会很有帮助。例如,两者都注入到您的ViewModel中,还是只是IUserService?