2014-12-04 4 views
0

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

container.RegisterType<IInterface, MyClass>(
    new InjectionConstructor(new ResolvedParameter<string>("Default")) 
    ); 

container.RegisterType<IInterface, MyClass>(
    "Named First", 
    new InjectionConstructor(new ResolvedParameter<string>("Named First")) 
    ); 

container.RegisterType<IInterface, MyClass>(
    "Named Second", 
    new InjectionConstructor(new ResolvedParameter<string>("Named Second")) 
    ); 

Допустим, я хочу, чтобы моя регистрация по умолчанию сделать то же самое вещь как «Именованная вторая» регистрация. Я мог бы мог сделать это:

container.RegisterType<IInterface, MyClass>(
    new InjectionConstructor(new ResolvedParameter<string>("Named Second")) 
    ); 

Есть ли способ иметь значение по умолчанию (безымянная?) Регистрация точки ко второму имени регистрации, вместо того, чтобы копировать все это? Что-то вроде:

container.RegisterType<IInterface, IInterface("Named Second")>(); // Doesn't work. 

В примере, это только конструктор с одним параметром, но, скажем, конструктор занимает 8 интерфейсов, 2 InjectionProperties и в InjectionMethod, вы не хотели бы, чтобы дублировать, рискуя десинхронизации.

ответ

1

Как насчет

container.RegisterType<IInterface>(new InjectionFactory(
    c => c.Resolve<IInterface>("Named Second"))); 

Не проверял это, но он должен делать то, что вам нужно.

+0

Похоже на звук. Я боялся разрешения интерфейса на «время регистрации», но я не знаю, почему я не думал об использовании выражения лямбда. Я проверю это завтра, но я не вижу причин, почему это не сработает! – Tipx

+0

Работал отлично, спасибо, сэр! – Tipx

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