C# Autofac:注册嵌套的泛型接口和类
我的WebApi项目中有一个DI Autofac。Autofac无法解析。我希望实现这样一种情况:我可以创建实现`IDB的新接口,以提供覆盖某些方法的新子类。我还想在将来用继承的类替换DPB 以下是代码结构: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
[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>>()