Недавно я столкнулся с проблемой, когда для службы с ключами я случайно использовал неверный ключ.Я использовал enums и оказалось, что похожий был определен в сторонней библиотеке.В результате их смешивания 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
}