将unityContainer集成到旧版应用程序的各个部分

时间:2018-10-15 16:04:12

标签: c# wpf dependency-injection unity-container prism-6

我已经构建了一个Prism / Unity / Wpf应用程序,并且它本身可以很好地工作。我们称它为A。

现在,我必须将该应用程序集成到一个不使用任何类型的依赖项注入的庞大的现有遗留应用程序中(简称为B)。 一切都在需要时实例化。

B中的某个地方(非常深),我必须展示使用构造函数注入的App A的userControl。

所以我尝试在B中使用依赖项注入。 但是在实例化A之前,我无法重构B中创建的所有内容,因为它只是深入内部。我需要一个容器并在其他地方调用它。

我尝试了很多类似这样的事情

class BModule : IModule
    {
        public static ShellViewModel ShellViewModelOfA { get; set; }  

        IRegionManager _regionManager;
        IUnityContainer _container;

        public CenterModule(RegionManager regionManager, IUnityContainer container)
        {
            _regionManager = regionManager;
            _container = container;
        }

        public void Initialize()
        {
            _container.RegisterType<ShellViewModel>();
            ShellViewModelOfA = _container.Resolve<ShellViewModel>();
        }
    }

然后在B的某处调用A的ShellViewModel,如下所示:

var a = BModule.ShellViewModelOfA;
a.SomeNavigationMethod();

这不起作用,因为RegionManagers区域的计数为0。

i尽管试图像这样存储UnityContainer:

   Application.Current.Resources.Add("IoC", this.Container);

根据此msdn链接: https://social.msdn.microsoft.com/Forums/vstudio/en-US/096c678c-a737-43e5-8621-14dfc42b2978/how-get-the-same-instance-of-object-from-unity-container-in-various-modules-of-prism-application?forum=wpf

这不起作用,因为像我尝试的另一个示例一样,“区域”的计数为0。

我什至考虑过要启动一个新的System.Process来从B中启动A。A是DI的根和起点。这种方法效果很好,但遗憾的是不是一个现实的选择。

必须为此提供更好的解决方案。我一直在与这个问题作斗争很长时间了。任何帮助都会很棒。

0 个答案:

没有答案