Я создал приложение 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.Такой подход работал отлично, но, к сожалению, не реальный вариант.
Для этого должно быть лучшее решение.Я борюсь с этой проблемой уже давно.Любая помощь будет великолепна.