Зарегистрировать параметр по имени в Unity - PullRequest
1 голос
/ 27 августа 2010

Можно ли в Unity зарегистрировать параметр по имени?Мой вариант использования следующий.Я хочу зарегистрировать значение типа DateTime с именем «asOfDate», чтобы для любого типа, который зависит от DateTime с параметром конструктора с именем «asOfDate», Unity будет обслуживать экземпляр DateTime, равный зарегистрированному значению

1 Ответ

1 голос
/ 01 марта 2012

Нет, это невозможно из коробки. Unity не полагается на имя параметра. Поэтому, когда любой класс ожидает DateTime в качестве параметра-конструктора, контейнер Unity будет использовать зарегистрированный независимо от имени параметра.

Чтобы только определенным типам вводили специальный DateTime и другие DateTime. Теперь вам нужно зарегистрировать общий DateTime обычным образом:

container.RegisterType<DateTime>();

Специальный объект должен быть зарегистрирован по имени:

container.RegisterInstance<DateTime>("special", DateTime.Now);

Теперь, когда вы хотите использовать специальный экземпляр DateTime при разрешении объекта, вы можете зарегистрировать этот объект следующим образом:

container.RegisterType<IMyType, MyType>(
    new InjectionConstructor(new ResolvedParameter<DateTime>("special"));
...