我有下面的情况下实现我的接口的类需要多个仿制药,但只使用其中的一个在其实施的接口(另一个是关闭的)的....注册局部打开泛型与Autofac
public interface ITest<T, TU>
{
}
public class Test<T, TU> : ITest<Guid, T>
{
}
我曾尝试注册这个作为
builder.RegisterGeneric(typeof (Test<,>)).AsImplementedInterfaces();
和
builder.RegisterGeneric(typeof (Test<,>)).As(typeof (ITest<,>));
但当余吨RY解决的
container.Resolve<ITest<Guid, string>>();
我得到
所请求的服务“ITest`2 [的System.Guid,mscorlib程序, 版本= 4.0.0.0,文化=中立, 公钥= b77a5c561934e089] ,[System.String,mscorlib, Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]' 尚未注册。为避免此异常,请注册 组件以提供服务,使用 IsRegistered()检查服务注册,或使用ResolveOptional()方法解析 可选依赖项。
我猜它假设泛型在实现和接口中是同一类型的吗?有什么建议么?
感谢
它是开源的,所以你可以看看在通用的解决方案代码:https://code.google.com/p/autofac/source/browse/Core/Source/Autofac/Features/OpenGenerics/OpenGenericServiceBinder.cs –
您的'测试'是否需要它的第二个泛型参数?因为如果你有这样的'public class Test :ITest '然后注册'builder.RegisterGeneric(typeof(Test <>))。AsImplementedInterfaces();'工作正常。 –
nemesv
不幸的是,我确实需要两个通用参数 – Levitron