Jestem nowy w Autofac (nie na DI). Oto sytuacja:Jak zarejestrować wiele otwartych generycznych w Autofac
mam te interfejsy:
public interface IQuery<out TResult> : IQuery { }
public interface IQueryHandler<in TQuery, out TResult> where TQuery : IQuery<TResult> {
TResult Handle(TQuery query);
}
i istnieje wiele realizacji z nich w moim rozwiązanie:
class GetPersonQuery : IQuery<PersonModel> { }
class GetPersonQueryHandler : IQueryHandler<GetPersonQuery, PersonModel> { }
class GetArticleQuery : IQuery<ArticleModel> { }
class GetArticleQueryHandler : IQueryHandler<GetArticleQuery, ArticleModel> { }
class GetSomethingQuery : IQuery<IEnumerable<SomeModel>> { }
class GetSomethingQueryHandler : IQueryHandler<GetSomethingQuery, IEnumerable<SomeModel>> { }
i tak dalej. Obecnie rejestruję je w następujący sposób:
builder.RegisterType<GetPersonQueryHandler>()
.As<IQueryHandler<GetPersonQuery, PersonModel>>();
builder.RegisterType<GetArticleQueryHandler>()
.As<IQueryHandler<GetArticleQuery, ArticleModel>>();
builder.RegisterType<GetSomethingQueryHandler>()
.As<IQueryHandler<GetSomethingQuery, SomeModel>>();
// blah blah blah
Jak widać, mam wiele takich samych rejestracji. W SimpleInjector
(którego używałem wcześniej), mogę zarejestrować je wszystkie w jednym wierszu:
container.RegisterManyForOpenGeneric(
typeof(IQueryHandler<,>),
AppDomain.CurrentDomain.GetAssemblies());
Czy można zrobić te rzeczy w Autofac?
Nie prostsze Injector? To mnie denerwuje: "( – Steven
Przepraszam): Pracuję z zespołem @ Javad_Amiry (Kavand). Jest tak z powodu problemu Javad_Amiry wcześniej (tutaj i na codeplex). Niestety w tym projekcie nie możemy użyć prostego wtryskiwacza. Ale naszą główną DI lib wciąż jest SimpleInjector. Wykorzystaliśmy go w wielu projektach i będziemy go nadal używać. :) –