C# Autofac:注册嵌套的泛型接口和类

C# Autofac:注册嵌套的泛型接口和类,c#,asp.net-web-api,dependency-injection,autofac,C#,Asp.net Web Api,Dependency Injection,Autofac,我的WebApi项目中有一个DI Autofac。Autofac无法解析。我希望实现这样一种情况:我可以创建实现`IDB的新接口,以提供覆盖某些方法的新子类。我还想在将来用继承的类替换DPB 以下是代码结构: [RoutePrefix("api/ro")] public class RODController : ApiController { public RODController(IFO fO, IROD<IDPB> rOD) { _fO = f

我的WebApi项目中有一个DI Autofac。Autofac无法解析。我希望实现这样一种情况:我可以创建实现`IDB的新接口,以提供覆盖某些方法的新子类。我还想在将来用继承的类替换DPB

以下是代码结构:

[RoutePrefix("api/ro")]
public class RODController : ApiController
{
    public RODController(IFO fO, IROD<IDPB> rOD)
    {
        _fO = fO ?? throw new ArgumentNullException(nameof(fO));
        _rOD = rOD ?? throw new ArgumentNullException(nameof(rOD));
    }
}

public interface IROD<T> : IDB<T> where T : IDPB
{ }

public class ROD<T> : DB<T>, IROD<IDPB> where T : IDP
{
    public ROD(IFO fO, T dPB) : base(fO, dPB)
    { }
}

public interface IDB<T> : IDF where T : IDPB
{ }

public abstract class DB<T> : IDB<T> where T : IDPB
{
    protected DB(IFO fO, T dPB)
    {
        _fO = fO ?? throw new ArgumentNullException(nameof(fO));
        _dPB = dPB;
    }
}

public interface IDPB
{ }

public class DPB : IDPB
{ }
在几年后的《Unity》中,我写了这篇文章来处理这个抽象类

container.RegisterType<IROD<IDPB>, ROD<DPB>>()
container.RegisterType()
编辑2

我在github上创建了一个项目,它生成了与上述相同的错误

我还准备了一个直接生成错误()的测试。 此控制器的URL为主机:port/api/ro/convert

编辑3


我添加了builder.RegisterType();它成功了。

例外情况表明,Autofac在
ROD
的构造函数中查找名为
DPB
的类型,但没有注册
DPB
。但是,
IDPB
的注册映射到
DPB
。您是否打算让
ROD
依赖于
IDPB

这就是堆栈溢出要求您构建MCVE的原因。这不仅是为了我们理解,也是为了你自己。你的新解决方案是这个MCVE。我想我是在过早的兴奋中。在更改期间,我从这个类中删除了继承。我在github上创建了一个项目,它生成了与上述相同的错误。我还准备了一个直接生成错误()的测试。此控制器的URL为主机:port/api/ro/convert
builder.RegisterType<ROD<DPB>>().As<IROD<IDPB>>();
container.RegisterType<IROD<IDPB>, ROD<DPB>>()