[英]How to register generic class with AutoFac that requires parameters?
AutoFac 允許您使用builder.RegisterGeneric(Type type)
注冊泛型類,但它不接受構造參數。 該方法的描述甚至說:
注冊一個未參數化的基因類型
但是,如果我有一個由Service實現的通用接口IService,它需要一些參數呢?
目前我已經這樣注冊了:
builder.Register(c =>
new Service<Class1>(
parameter1,
parameter2))
.As<IService<Class1>>();
在注冊時,我必須指定 T 的確切類型(在本例中為 Class1)。 我可以更一般地做這件事,以便我有一個適用於任何 T 的注冊嗎?
這里記錄了每一件事: https : //autofaccn.readthedocs.io/en/latest/register/parameters.html
基本上,您可以繼續使用RegisterGeneric
並使用WithParameter
builder.RegisterGeneric(typeof(Service<>))
.WithParameter("nameOfParam1", parameter1)
.WithParameter("nameOfParam2", parameter2)
.As(typeof(IService<>));
對於那些尋找多種 Ttypes 的人(像我一樣)。
builder.RegisterGeneric(typeof(BaseGeneralCrud<,,>)).As(typeof(IBaseGeneralCrud<,,>)).InstancePerLifetimeScope();
這是類定義的樣子:
public class BaseGeneralCrud<TEntity, TDto, TIdType> : IBaseGeneralCrud<TEntity,TDto,TIdType>
where TEntity : class, IHasIdColumn<TIdType>
where TDto : IHasIdColumn<TIdType> , new()
where TIdType : notnull
{
private readonly IRepository<TEntity,TIdType> _repository;
private readonly IMapper _mapper;
public BaseGeneralCrud(IRepository<TEntity,TIdType> repository, IMapper mapper)
{
_repository = repository;
_mapper = mapper;
}
// there are some methods defined here..
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.