如何将 structuremap 容器配置添加到 Web Api 启动文件
How to add structuremap container configuration to Web Api Startup file
我已经(在一个单独的项目中)设置了一个 StructureMap 容器,如下所示:
public class Container
{
public static StructureMap.Container Current { get; private set; }
public static void InitIoC()
{
var container = new StructureMap.Container(
c =>
{
c.For<AppSettings>().Singleton();
c.For<ILogger>().Use<Logger>();
c.For<IReminderService>().Use<ReminderService>();
...
}
}
}
我希望在 .NET Core 2.0 Web 中使用此配置 API。
在我的 Startup.cs 中,我必须这样做才能使其正常工作:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Add(ServiceDescriptor.Transient(typeof(ILogger), typeof(Logger)));
... // rewriting what is already configured
}
我怎样才能简单地将相同的配置注入 WebAPI?
你可以试试这个:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//Create StructureMap container
var container = new Container(); //This is Structuremap's container class, not your custom class
container.Configure(config =>
{
//Add in your custom structuremap registry
config.AddRegistry(new Container());
//Push the .net Core Services Collection into StructureMap
config.Populate(services);
});
//Register dependencies
services.ConfigureDependencies();
//Return the service provider
return container.GetInstance<IServiceProvider>();
}
我不知道是否有必要,但您可以将 Container
class 更改为:
public class Container: Registry
{
public Container()
{
c.For<ILogger>().Use<Logger>();
c.For<IReminderService>().Use<ReminderService>();
//More mappings
}
}
我已经(在一个单独的项目中)设置了一个 StructureMap 容器,如下所示:
public class Container
{
public static StructureMap.Container Current { get; private set; }
public static void InitIoC()
{
var container = new StructureMap.Container(
c =>
{
c.For<AppSettings>().Singleton();
c.For<ILogger>().Use<Logger>();
c.For<IReminderService>().Use<ReminderService>();
...
}
}
}
我希望在 .NET Core 2.0 Web 中使用此配置 API。
在我的 Startup.cs 中,我必须这样做才能使其正常工作:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Add(ServiceDescriptor.Transient(typeof(ILogger), typeof(Logger)));
... // rewriting what is already configured
}
我怎样才能简单地将相同的配置注入 WebAPI?
你可以试试这个:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//Create StructureMap container
var container = new Container(); //This is Structuremap's container class, not your custom class
container.Configure(config =>
{
//Add in your custom structuremap registry
config.AddRegistry(new Container());
//Push the .net Core Services Collection into StructureMap
config.Populate(services);
});
//Register dependencies
services.ConfigureDependencies();
//Return the service provider
return container.GetInstance<IServiceProvider>();
}
我不知道是否有必要,但您可以将 Container
class 更改为:
public class Container: Registry
{
public Container()
{
c.For<ILogger>().Use<Logger>();
c.For<IReminderService>().Use<ReminderService>();
//More mappings
}
}