Как я могу запретить Autofac вводить ноль при случайном использовании неверного ключа? - PullRequest
0 голосов
/ 23 октября 2018

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

1 Ответ

0 голосов
/ 23 октября 2018

Используйте 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];

        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...