我最近遇到了一个问题,其中一个Keyed Service意外地使用了无效的密钥。我在使用枚举,结果发现在第3方库中定义了一个类似的枚举。由于将它们混合在一起,Autofac注入了null
依赖项,因此我们不得不调试了一段时间,直到找到原因为止。
我的问题是,如果不存在密钥,是否存在一种机制可以阻止Autofac注入/解析null
服务?我想到的是Autofac抛出一个异常,因为它无法像许多其他情况一样解决依赖项。
我创建了一个演示此问题的演示:
void Main()
{
var builder = new ContainerBuilder();
builder
.RegisterType<Class1>()
.Keyed<IInterface>(Key.First);
builder
.RegisterType<Class2>()
.Keyed<IInterface>(Key.Second);
builder
.RegisterType<Class>()
.WithAttributeFiltering();
var container = builder.Build();
var scope = container.BeginLifetimeScope();
scope.Resolve<Class>().Dump();;
}
interface IInterface { }
class Class1 : IInterface { }
class Class2 : IInterface { }
class Class
{
public Class([KeyFilter(DifferentKey.First)] IInterface i)
{
i.Dump(); // null because the key is wrong
}
}
enum Key
{
First,
Second
}
enum DifferentKey
{
First,
Second
}
答案 0 :(得分:1)
如果在缺少依赖项的情况下确实需要错误,请使用IIndex
注入依赖项。
class Class
{
public Class(IIndex<DataType, ITestItem> list)
{
//Throws error if you try to get the instance for unregistered key
var test = list[DataType.Type2];
}
}