0

У меня возникла проблема с разрешением типа, зарегистрированного в UnityContainer. В моем bootstraper я переопределил метод ConfigureContainer. Сейчас этот метод выглядит следующим образомUnityContainer не может решить тип

protected override void ConfigureContainer() 
    { 

     base.ConfigureContainer(); 
     RegisterTypeIfMissing(typeof(IView<ShellViewModel>), typeof(Shell), false); 
     RegisterTypeIfMissing(typeof(CommandReaderWriter), typeof(CommandReaderWriter), true); 
    } 

Тогда в функции CreateShell (также в bootstraper) Я хочу, чтобы получить экземпляр типа CommandReaderWriter, так что я сделал это

var raeder = Container.TryResolve<CommandReaderWriter>(); 

сожалению это возвращает нулевое значение. Я также пробовал

var anotherReader = Container.TryResolve(typeof (CommandReaderWriter)); 

но это не помогло. Однако интересен тот факт, что

var isRegistered = Container.IsTypeRegistered(typeof (CommandReaderWriter)); 

возвращает true.

так какой уместный способ зарегистрировать singleletone в UnityContainer?

+0

Я не знаю UnityBootstrapper, но могу поспорить, что RegisterTypeIfMissing ожидает, что первым параметром будет интерфейс, а не класс. Можете ли вы попасть в IUnityContainer и просто использовать обычные методы Unity для регистрации? – ErnieL

ответ

0

двумя способами, которые я использую, чтобы зарегистрировать синглтон в Unity являются:

_container.RegisterInstance<CommandReaderWriter>(new CommandReaderWriter); 

и

_container.RegisterType<CommandReaderWriter,CommandReaderWriter>(new ContainerControlledLifetimeManager()); 

Оба эти методы устанавливают Единство LifeTimeManager быть ContainerControlledLifeTimeManager, что Unity-говорить синглтон.

Если вы хотите точно контролировать, как объект построен, используйте RegisterInstance. Второй вариант - мой предпочтительный, потому что Unity выполняет все управление зависимостями для меня.

Смежные вопросы