簡體   English   中英

如何使用需要參數的 AutoFac 注冊泛型類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM