скажем, этот сценарий:
public class B {};
public class C
{
public C(B b){}
}
Для разрешения C от контейнера Autofac я должен зарегистрировать и B и C к контейнеру. Но, сегодня я использовал Единицу, кажется, что я просто должен зарегистрировать B к контейнеру, затем C может быть разрешен.
Таким образом, Autofac не может сделать, как Единица делает?
В автоматическом режиме Autofac ожидается, что каждый тип, который вы хотите использовать, будет зарегистрирован в контейнере либо напрямую с помощью методов Register ...
или массово с использованием RegisterAssemblyTypes
. Но есть и другие варианты, посмотрите статью Николая о решении всего . Итак, да, Autofac может делать то, что делает Unity, но вам нужно будет включить его.
Обновление: на самом деле функция «разрешать что угодно» уже встроена, и вы можете сделать следующее:
var cb = new ContainerBuilder();
cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
return cb.Build();
С помощью AnyConcreteTypeNotAlreadyRegisteredSource
вы можете разрешить оба C
и B
без регистрации ни одного из них.
Обратите внимание, что время жизни служб, разрешенных AnyConcreteTypeNotAlreadyRegisteredSource
, будет «на область зависимости» .
Примечание: эта тема в дискуссионной группе Autofac связана.