2009-12-11 56 views
2

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

每次我加载模块ViewKDI我希望Unity返回ViewKDIService和UserService的新实例。

我已经把下面的外壳引导程序:

Container.RegisterType<IUserService, UserService>(); 

在ViewKDI模块我已经把以下内容:

Container.RegisterType<IViewKDIService, ViewKDIService>(); 

每次ViewKDI模块加载ViewKDIService构造函数被调用。但是,UserService构造函数只是第一次调用,这意味着我没有获得UserService的新实例。

我需要统一性给我一个UserService的新实例,以便我可以与应用程序的其余部分分开管理此会话。

任何想法?

感谢 费萨尔

+0

你能否提供更多关于何时解决每种类型的细节? IUserService是ViewKDIService的依赖项吗? – 2009-12-11 16:45:56

+0

我没有明确地调用解决方案,我只是将接口放在我的ViewModel的构造函数中,然后让Unity解决它们。 IUserService不依赖于IViewKDIService。 – Faisal 2009-12-11 16:59:45

+0

查看哪些对象IUserService和IViewKDIService被注入以了解它们的生命周期会很有帮助。例如都注入到您的ViewModel或只是IUserService? – 2009-12-11 17:16:51

回答

2

统一的默认行为是创建每一个新的实例对象每次一个请求,所以你应该不会看到此行为。

从我可以从源代码和MSDN文档(this是一个很好的阅读)中可以收集到的信息,当你注册一个类型来告诉Unity应该如何构造和缓存类型时,你可以指定一个“终身管理器”对象。使用TransientLifetimeManager(本质上不执行缓存)将导致Unity每次重新创建类。所以试试这个:

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

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

+0

谢谢我会试试这个 – Faisal 2009-12-14 12:50:55