AutoFac允许您向builder.RegisterGeneric(Type type)
注册通用类,但是它不接受用于构造的参数。该方法的说明甚至说:
注册未参数化的字母类型
但是,如果我有一个由Service实现的通用接口IService,它需要一些参数怎么办?
目前,我已将其注册为:
builder.Register(c =>
new Service<Class1>(
parameter1,
parameter2))
.As<IService<Class1>>();
在注册中,我必须指定T的确切类型(在这种情况下为Class1)。我可以更笼统地做到这一点,这样我就有一个注册可以适用于任何T吗?
答案 0 :(得分:3)
此处记录了所有内容:https://autofaccn.readthedocs.io/en/latest/register/parameters.html
基本上,您可以继续使用RegisterGeneric
并使用WithParameter
builder.RegisterGeneric(typeof(Service<>))
.WithParameter("nameOfParam1", parameter1)
.WithParameter("nameOfParam2", parameter2)
.As(typeof(IService<>));
答案 1 :(得分:0)
对于那些正在寻找多个Ttype的人(例如我)。
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..
}