2016-12-04 2 views
0

Я очень новичок в ASP.Core. У нас есть проект, и мы должны использовать Dependency Injection и StructureMap. Мне интересно, правильно ли положить контейнер в файл StartUp.cs следующим способом. А если safe поставить IHttpContextAccessor в конфигурации, как показано ниже:ASP.Core StructureMap Container

public void ConfigureServices(IServiceCollection services) { 

     Container container = new Container(expr => { 
      expr.For<IDataContextService>().Use<DataContextService>(); 
      expr.For<IHttpContextAccessor>().Use<HttpContextAccessor>(); 
      expr.For<ISessionService>().Use<SessionService>(); 
     }); 
     services.AddSingleton<IContainer>(container); 
    } 

ответ

2

при изменении базового Dependency контейнера в ядре ASP.NET, ConfigureServices должен возвращать экземпляр IServiceProvider

Andew Замок в его блог post показывает вам, как это выполнить.

Взятые из его блога, это было бы что-то подобное для StructureMap

public IServiceProvider ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddMvc() 
     .AddControllersAsServices(); 

    return ConfigureIoC(services); 
} 

public IServiceProvider ConfigureIoC(IServiceCollection services) 
    { 
     var container = new Container(); 

     container.Configure(config => 
     { 
      // Register stuff in container, using the StructureMap APIs... 
      config.Scan(_ => 
      { 
       _.AssemblyContainingType(typeof(Startup)); 
       _.WithDefaultConventions(); 
       _.AddAllTypesOf<IGamingService>(); 
       _.ConnectImplementationsToTypesClosing(typeof(IValidator<>)); 
      }); 

      config.For(typeof(IValidator<>)).Add(typeof(DefaultValidator<>)); 
      config.For(typeof(ILeaderboard<>)).Use(typeof(Leaderboard<>)); 
      config.For<IUnitOfWork>().Use(_ => new UnitOfWork(3)).ContainerScoped(); 

      //Populate the container using the service collection 
      config.Populate(services); 
     }); 

     return container.GetInstance<IServiceProvider>(); 

    } 
} 

Если когда-либо вы заинтересованы в использовании Autofac вы можете обратиться к ASP.NET documentation по этому вопросу

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