Подтвердить что ты не робот

Нужно ли регистрировать каждый класс до того, как контейнер autofac сможет решить проблему?

скажем этот сценарий:

public class B {};

public class C
{
     public C(B b){}
}

Чтобы разрешить C из контейнера Autofac, я должен зарегистрировать как B, так и C в контейнер. Но сегодня я использовал Unity, кажется, мне просто нужно зарегистрировать B в контейнере, тогда C можно решить.

Итак, Autofac не может делать, как это делает Unity?

4b9b3361

Ответ 1

С готовым Autofac ожидается, что каждый тип, который вы хотите использовать, зарегистрирован в контейнере, либо непосредственно с помощью методов Register..., либо в массовом порядке с помощью RegisterAssemblyTypes. Но есть и другие варианты, взгляните на статью Николая о разрешении всего. Так что да, Autofac может делать то, что делает Unity, но вам нужно включить его.

Обновление:, теперь функция "разрешить все" встроена, и вы можете сделать следующее:

        var cb = new ContainerBuilder();
        cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
        return cb.Build();

С помощью AnyConcreteTypeNotAlreadyRegisteredSource вы можете фактически разрешить как C, так и B без регистрации каких-либо из них.

Обратите внимание, что время жизни служб, разрешенных AnyConcreteTypeNotAlreadyRegisteredSource, будет для каждой области зависимостей.

Примечание: этот раздел в группе обсуждения Autofac связан.