Призмный эквивалент UnityContainer.AddNewExtension - PullRequest
0 голосов
/ 13 января 2020

У нас есть приложение WPF, разделенное на несколько C резких проектов. Наш бизнес-уровень также должен зарегистрировать некоторые объекты Service в контейнере. Мы считаем, что способ сделать это с Unity -

 Container.RegisterType<ISomeClass,SomeClass>();

в библиотеке бизнес-уровня C sharp, а затем в основном приложении пользовательского интерфейса

 UnityContainer.AddNewExtension<T>(); 

Выше подробно описано здесь https://www.c-sharpcorner.com/article/dependency-injection-using-unity-resolve-dependency-of-dependencies/

Если мы используем Prism, каковы эквивалентные методы? В частности, мы думали только об использовании Unity (не Prism) в бизнес-библиотеке, чтобы мы могли портировать его на Xamarin Ma c и Linux. Мы будем использовать Prism только в проекте приложения WPF UI. Может ли это работать?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 января 2020

Технически ответ Haukinger правильный, так как вы всегда можете получить доступ к базовому контейнеру, когда / если вам это нужно. В этом случае, однако, это, вероятно, не лучший подход здесь. И Bootstrapper, и PrismApplication имеют виртуальный метод CreateContainerExtension. Вот где Prism.Unity делает:

// new UnityContainer() is created by default here...
return new UnityContainerExtension();

Я хотел бы предложить вам настроить контейнер заранее

protected override IContainerExtension CreateContainerExtension()
{
    var container = new UnityContainer();
    container.AddExtension<SomeExtension>();
    return new UnityContainerExtension(container);
}
1 голос
/ 13 января 2020

Если мы используем Prism, каковы эквивалентные методы?

Есть некоторые методы в IContainerRegistry, но их поведение недостаточно хорошо документировано (кроме того, «они делают то, что метод контейнера, который они обертывают »), и они охватывают только самые распространенные варианты использования.

Хорошая новость: вы можете вернуть контейнер обратно, используя GetContainer метод расширения для вашего контейнера:

using Prism.Unity.Ioc;

containerRegistry.GetContainer().AddExtension<TheNeatExtension>();
...