Autofac: какой способ разрешить самую внутреннюю область?

Сейчас я пробую Autofac в новом ASP.NET MVC после использования в последние годы контейнеров Ninject, Castle Windsor и других IoC. Итак, хотя я знаю о контейнерах IoC в целом, я новичок в Autofac и все еще ищу некоторые передовые методы.

В настоящее время я пытаюсь выяснить, есть ли способ разрешить самую внутреннюю вложенную область видимости.

У меня следующая ситуация: компонент, зарегистрированный как SingleInstance (), имеет метод, который создает вложенную область времени существования, обеспечивая действие конфигурации для настройки некоторых компонентов как InstancePerLifetimeScope, и в этой вложенной области разрешает зарегистрированные компоненты для выполнения что-то полезное, например:

ILifetimeScope currentScope = ???;

using (var scope = currentScope.BeginLifetimeScope(cb => {
  cb.RegisterType<X>().InstancePerLifetimeScope();
  // ...
}))
{
    var comp = scope.Resolve<X>();
    // ...
}

Проблема в том, что я хотел бы, чтобы currentScope была самой внутренней областью времени существования, потому что я знаю, что X зависит от компонентов внутри самой внутренней области. В простейшем случае это было бы, например, текущая область существования запроса. Я, конечно, могу получить его с помощью AutofacDependencyResolver.Current.RequestLifetimeScope, но я не хочу использовать его, поскольку он не очень хорошо тестируется. Кроме того, этот срок жизни не обязательно является самым внутренним.

Итак, есть ли способ найти самый внутренний объем времени жизни, указанный, например, корневой контейнер или другой ILifetimeScope?

5
задан tereško 17 July 2012 в 00:06
поделиться