2015-07-23 2 views
2

Поэтому у меня есть интерфейс и класс:Autofac Resolve Открыть общий интерфейс с открытым родового класса

public interface IMyInterface<T> where T : ISomeEntity {} 

public class MyClass<T> : IMyInterface<T> 
    where T : ISomeEntity {} 

у меня будет некоторый класс, который призывает к нему:

public class SomeClass : ISomeClass 
{ 
    public SomeClass (IMyInterface<AuditEntity> myInterface) {} 
} 

я сделал все виды вещей, чтобы заставить его зарегистрировать открытый общий интерфейс и класс без везения.

Я просто хочу сказать, что-то вроде:

container.RegisterType(typeof(MyClass<>)).As(typeof(IMyInterface<>)); 

Было бы досадно, если я должен пройти и явно что-то вроде:

container.RegisterType<MyClass<AuditEntity>>().As<IMyInterface<AuditEntity>>(); 

Не должно ли это быть тривиальным?

ответ

6

Вы должны использовать метод RegisterGeneric см Registration Concepts - Open Generic Components

Что-то вроде этого должна работать:

builder.RegisterGeneric(typeof(MyClass<>)).As(typeof(IMyInterface<>)); 
+0

Genius благодарит, обработал удовольствие. –

2

Да тривиально с container.RegisterGeneric:

container.RegisterGeneric(typeof(MyClass<>)).As(typeof(IMyInterface <>)); 

Вы также, кажется, есть свой интерфейс и класс включен в примерах в вашем вопросе. Регистрация должна начинаться с типа, который требуется зарегистрировать (например, MyClass), за которым следует тип, который вы должны зарегистрировать (например, IMyInterface).

+0

Да, я только что заметил, что я так привык использовать Unity, Ninject, что, когда дело доходит до autofac это наоборот. –

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