2014-01-02 6 views
0

У меня есть много классов в одном пространстве имен, реализующих один и тот же интерфейс.
Если я хочу ввести эти классы, мне нужно явно объявить команду для каждого экземпляра.Замок Виндзор вводит несколько экземпляров одной командой

namespace AllClasses{ 

public class A<Brand> : IValidatable<Brand>{ 
} 

public class B<Customer> : IValidatable<Customer>{ 
} 

public class C<User> : IValidatable<User>{ 
} 

public class D<Campaign> : IValidatable<Campaign>{ 
} 

} 


public class INeedInjection{ 
    public INeedInjection(IValidatable<User> uv){} 

} 

Есть ли все-таки ввести все вышеперечисленные классы (A, B, C, D) с помощью одной команды?

Благодаря

UPDATE 1
Там находятся около 25 классов, реализующих IValidatable, я не хочу писать явные инъекции в реализацию. все разработчики очень похожи, поэтому я просто предположил, что для этого есть подстановочная команда.

+0

Непонятный вопрос. Вы хотите вставить список всех «разработчиков» вместо одного экземпляра, который требует ваш класс «INeedInjection»? –

+0

@JoachimIsaksson, см. Мой UPDATE1 спасибо – SexyMF

+0

Правильная терминология - «пакетная регистрация», вот что вы хотите сделать. – Steven

ответ

2

Вы можете зарегистрировать все IValidatables в сборке, используя класс Types;

Пример регистрирует все классы, реализующие IValidatable<T> в текущей сборки сразу, но и другие методы Types позволяет выбрать любой другой узел для регистрации с;

_container.Register(
    Types.FromThisAssembly() 
     .BasedOn(typeof (IValidatable<>)) 
     .WithService.Base()); 
+0

Я не понимаю, у вас все еще есть 2 команды для каждой реализации (A и B), в моем случае 25 команд. Я ищу одну команду, если это возможно, спасибо – SexyMF

+0

@SexyMF Hm, другими словами, вы имеете в виду «Я не хочу писать явное _registration_ для каждой реализации», а не как вы говорите: «Я не хочу писать явные инъекции на реализацию»? –

+0

Да, это правильно. Я хочу написать одну регистрацию для этого интерфейса ... – SexyMF

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