Должны зарегистрировать каждый класс, прежде чем autofac контейнер сможет решить?

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

public class B {};

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

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

Таким образом, Autofac не может сделать, как Единица делает?

12
задан Benny 5 August 2010 в 10:06
поделиться

1 ответ

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

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

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

С помощью AnyConcreteTypeNotAlreadyRegisteredSource вы можете разрешить оба C и B без регистрации ни одного из них.

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

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

21
ответ дан 2 December 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: