如何向 AutoFac 注册需要参数的泛型类?

Lor*_*eno 2 c# ioc-container inversion-of-control autofac

AutoFac 允许您使用 注册泛型类builder.RegisterGeneric(Type type),但它不接受构造参数。该方法的描述甚至说:

注册一个非参数化的通用类型

但是,如果我有一个由 Service 实现的通用接口 IService,需要一些参数怎么办?

目前我已经这样注册了:

builder.Register(c =>
    new Service<Class1>(
        parameter1,
        parameter2))
    .As<IService<Class1>>();
Run Code Online (Sandbox Code Playgroud)

在注册时,我必须指定 T 的确切类型(在本例中为 Class1)。我可以更通用地进行操作,以便我可以为任何 T 提供一个注册吗?

Ofi*_*ten 5

所有内容都记录在这里:https://autofaccn.readthedocs.io/en/latest/register/parameters.html

基本上,你可以继续使用RegisterGeneric并使用WithParameter

builder.RegisterGeneric(typeof(Service<>))
       .WithParameter("nameOfParam1", parameter1)
       .WithParameter("nameOfParam2", parameter2)
       .As(typeof(IService<>));
Run Code Online (Sandbox Code Playgroud)