繁体   English   中英

没有服务定位器的多实例的依赖注入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM