Обычно вы делаете это в модуле, содержащем реализации.Контейнер Unity будет предоставлен с использованием внедрения зависимостей в конструктор модуля;следовательно, Shell никогда не нужно фактически регистрировать реализации с интерфейсом.Модуль, содержащий интерфейсы, обычно является инфраструктурной DLL (а не модулем), и поэтому на него могут ссылаться модули реализации.
Обратите внимание, что это соответствует рекомендациям Prism относительно разделения интерфейса / реализации между библиотеками DLL.,Они углубляются в это в отношении услуг;хотя я сомневаюсь, что вы найдете примеры их использования для моделей или других объектов.
Пример:
using Microsoft.Practices.Unity;
using YourInfrastructureDll;
public sealed class ModuleImplementationA : IModule
{
private readonly IUnityContainer _container;
public ModuleImplementationA(IUnityContainer container)
{
_container = container;
}
public void Initialize()
{
// IYourInterface is defined in the Infrastructure DLL, while YourImplementationA exists in this module
_container.RegisterType<IYourInterface, YourImplementationA>();
}
}
Это можно заменить другой DLL-библиотекой реализации:
using Microsoft.Practices.Unity;
using YourInfrastructureDll;
public sealed class ModuleImplementationB : IModule
{
private readonly IUnityContainer _container;
public ModuleImplementationB(IUnityContainer container)
{
_container = container;
}
public void Initialize()
{
// IYourInterface is defined in the Infrastructure DLL, while YourImplementationB exists in a different module than the first
_container.RegisterType<IYourInterface, YourImplementationB>();
}
}