2015-11-20 5 views
0

С некоторыми предположениями о том, как работает AutoFac, я не смог заставить свой код работать в моем приложении ASP.NET 5. Я включил AutoFac в качестве рамки DI в мое приложение ASP.NET 5 и все работает отлично, а зависимости, которые я регистрирую до первого вызова метода Build, получают инъекцию в порядке, но когда я пытаюсь зарегистрировать Modules из других сборок, на которые ссылается основная сборка, я больше не могу вводить тему в контроллер.AutoFac - Регистрация услуг с помощью ILifetimeScope после первого вызова `Build`

это то, что я пробовал:

ContainerBuilder builder = new ContainerBuilder(); 
    builder.Register<MyService>().As<IMyService>();  
builder.Build(); 

и после этого я уже создать и зарегистрирован Module:

public class MyModule : Module 
    { 
     protected override void Load(ContainerBuilder builder) 
     { 
      builder.RegisterType<SomeService>() 
       .As<ISomeService>() 
       .SingleInstance(); 
     } 
    } 

и в классе менеджера по инъекционным ILifetimeScope:

public class ManagerClass(){ 
    private readonly ILifetimeScope _lifetimeScope; 

    public ManagerClass(ILifetimeScope lifetimeScope){ 
      _lifetimeScope = lifetimeScope; 
    } 

    public void RegisterModules(){ 
      _lifetimeScope.BeginLifetimeScope(builder => 
      { 
        builder.RegisterAssemblyModules(blueprint.Assemblies.Select(b=>b.Assembly).ToArray()); 
      }); 
    } 
} 

Я установил точку останова на Load метод MyModule класс, и он попадает, но когда я пытаюсь ввести ISomeService (зарегистрированный MyModule), я получаю исключение ComponentNotRegisteredException.

ответ

1

Как правило, не выполняется настройка впрыска зависимостей. Вы должны настроить свои зависимости один раз при запуске. Может быть, заводская модель является лучшим решением в этом случае?

Если вы действительно хотите, чтобы это работало, вам понадобится ссылка на текущий IContainer и update it

Смежные вопросы