2011-12-14 4 views
2

У меня есть иерархия классов с примерно 30 классами, которая имеет четыре уровня глубины.Устранение базовых классов

Например:

  • Class1
    • Class1a
      • Class1ac
    • Class1b
  • Class2

К этому я получил интерфейс под названием IConsumerOf<T>.

Как я могу получить конструкторы IConsumerOf<Class1>, чтобы также вызываться всеми классами, наследующими Class1? (без применения IConsumerOf<Class1a> и т. д.)

Редактировать: добавление ограничения типа для интерфейса не является вариантом. И обратите внимание на тег Autofac.

+0

Является ли это для контравариантной регистрации? –

+0

@NicholasBlumhardt: Я так считаю. Добавьте его в качестве ответа. – jgauffin

ответ

1
builder.RegisterSource(
    new ContravariantRegistrationSource()); 

Позволяет это поведение :). Ура!

1

Объявляет интерфейс, как IConsumerOf<T> where T:Class1 вместо

+0

Если вы не можете (или не хотите) изменять интерфейс, вы можете использовать реализацию, определенную как 'class Consumer : IConsumer , где T: Class1' –

+0

. Это приведет к сбою интерфейса для классов Class2, Class 3 'и т.д. – jgauffin

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