Unity返回新的服务实例

时间:2009-12-11 16:41:42

标签: wpf unity-container

使用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实例,以便我可以与应用程序的其余部分分开管理这个会话。

有什么想法吗?

由于 费萨尔

1 个答案:

答案 0 :(得分:2)

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

从我可以从源代码和MSDN文档中收集的内容(this是一个很好的阅读),您可以在注册类型时指定“生命周期管理器”对象,以告诉Unity应该如何构造类型和缓存。使用TransientLifetimeManager(基本上不进行缓存)将导致Unity每次重新创建类。所以试试这个:

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

...并查看每次是否创建新的UserService。