[英]Dependency injection for multiple instance without service locator
我正在使用Unity作为Ioc进行WPF应用程序的依赖注入
我用以下方法创建主窗口:
container.RegisterType<IMainWindow, MainWindow>();
container.RegisterType<ISecondWindow, SecondWindow>();
container.Resolve<IMainWindow>().Show();
所有其他窗口都通过依赖项注入进行注入,例如,在我的“ MainWindow”中,我可以通过“ SecondWindow”中的一个按钮打开,因此我在MainWindow构造函数中具有ISecondWindow
public partial class MainWindow: Window, IMainWindow
{
public MainWindow(IMainWindowViewModel viewModel, ISecondWindow secondWindow)
{
//with this solution I can open the second window from IMainWindowViewModel (viewmodels has no reference to windows which are in a separate project)
viewModel.OpenSecondWindow += (s,e) => secondWindow.Show();
}
SecondWindow没有其他窗口,因此在其构造函数中仅定义了ViewModels
public partial class SecondWindow: Window, ISecondWindow
{
public SecondWindow(ISecondWindowViewModel viewModel)
然后所有的依赖项都级联解决(WINDOW-> VIEWMODEL-> SERVICE-> REPOSITORY)
直到我只有第二个窗口的一个实例,这才可以正常工作,但是...
如果我可以同时打开NSecondWindow的N个窗口/实例怎么办(例如,我有一个列表,双击第一行,然后打开包含第一行详细信息的ISecondWindow,然后双击第二行和另一个ISecondWindow打开了第二行详细信息(因此我可以同时查看第一行和第二行详细信息)吗?
使用DI则无法完成,因为我拥有并且只能使用我的ISecondWindow的一个实例。
我认为解决此问题的唯一解决方案是使用Service locator,但是Service locator是一种反模式,我不会使用它。
您是否有任何想法/建议来解决这个问题?
尝试使用TransientLifetimeManager注册您的ISecondWindow。
http://www.tutorialsteacher.com/ioc/lifetime-manager-in-unity-container
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.