Интеграция unityContainer с частями Legacy Application - PullRequest
0 голосов
/ 15 октября 2018

Я создал приложение Prism / Unity / Wpf, и оно само по себе отлично работает.Давайте назовем это A.

Теперь мне нужно интегрировать приложение в огромное существующее унаследованное приложение (назовем его B), которое не использует никакой инъекции зависимостей.Все создается при необходимости.

Где-то (очень глубоко) в B я должен показать userControl приложения A, который использует инжектор конструктора.

Поэтому я попытался использовать инъекцию зависимостей в B. Ноя не могу реорганизовать все, что создано в B до того, как будет создан A, потому что это просто глубоко внутри.Мне нужно удержать контейнер и вызвать его где-нибудь еще.

Я пробовал много таких вещей, как это

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 ShellViewModel из A, например:

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

Это не работает, потому что счетчик регионов RegionManagers равен 0.

я хотя и пытался сохранить 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 для запуска A outБ. А был корнем и отправной точкой для DI.Такой подход работал отлично, но, к сожалению, не реальный вариант.

Для этого должно быть лучшее решение.Я борюсь с этой проблемой уже давно.Любая помощь будет великолепна.

...