Tôi mới đến Autofac (không phải DI). Đây là tình hình:Cách đăng ký nhiều tài khoản mở chung trong Autofac
tôi có các giao diện:
public interface IQuery<out TResult> : IQuery { }
public interface IQueryHandler<in TQuery, out TResult> where TQuery : IQuery<TResult> {
TResult Handle(TQuery query);
}
và có rất nhiều thực hiện chúng trong dung dịch của tôi:
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>> { }
và vân vân. Tôi hiện đang đăng ký chúng như thế này:
builder.RegisterType<GetPersonQueryHandler>()
.As<IQueryHandler<GetPersonQuery, PersonModel>>();
builder.RegisterType<GetArticleQueryHandler>()
.As<IQueryHandler<GetArticleQuery, ArticleModel>>();
builder.RegisterType<GetSomethingQueryHandler>()
.As<IQueryHandler<GetSomethingQuery, SomeModel>>();
// blah blah blah
Như bạn có thể thấy, tôi có nhiều đăng ký giống nhau. Trong SimpleInjector
(mà tôi đã sử dụng trước đó), tôi có thể đăng ký tất cả trong số họ bởi một dòng duy nhất:
container.RegisterManyForOpenGeneric(
typeof(IQueryHandler<,>),
AppDomain.CurrentDomain.GetAssemblies());
Có thể làm công cụ này trong Autofac?
Không đơn giản hơn Injector? Điều đó làm tôi buồn: '( – Steven
Xin lỗi): Tôi đang làm việc với nhóm @ Javad_Amiry (Kavand). Đó là vì vấn đề mà Javad_Amiry đã hỏi trước đây (ở đây và trên codeplex). Thật không may trong dự án này, chúng tôi không thể sử dụng vòi phun đơn giản. Nhưng DI lib chính của chúng tôi vẫn là SimpleInjector. Chúng tôi đã sử dụng nó trong nhiều dự án và chúng tôi sẽ tiếp tục sử dụng nó. :) –