【发布时间】:2017-06-08 18:14:08
【问题描述】:
我想将我的 dbcontext 注入到我在 web api 2 项目中的服务中。但我有点不确定如何做到这一点。我已经阅读了文档,但生命周期、范围、请求、嵌套容器……它们都让我有点不确定。我根据自己的最佳理解拼凑了以下代码。安装 Nuget 包 StructureMap.WebApi2 后,我继续将 SM 从 v3 更新到 v4,以及将 SM.MVC5 从 v3 更新到 v4。
以下代码似乎具有每个 http 请求使用一个 dbcontext 的预期效果(我认为这就是我想要的......我对范围很困惑)以便在用户期间为所有服务共享相同的 dbcontext事务,然后在事务(http请求)关闭时处理。但外表并不总是正确的。
IoC.cs
public static IContainer Initialize()
{
var container = new Container(_ =>
{
_.AddRegistry<DefaultRegistry>();
_.ForConcreteType<MyDbContext>().Configure.ContainerScoped();
});
DomainEvents.Initialize(container);
return container;
}}
DefaultRegistry.cs:
public DefaultRegistry()
{
var mapperConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new Common.Map.MapProfile());
cfg.CreateMissingTypeMaps = true;
});
var mapper = mapperConfig.CreateMapper();
For<IMapper>().Use(() => mapperConfig.CreateMapper());
For<MyDbContext>().Use(()=> new MyDbContext());
Scan(
scan =>
{
scan.AssemblyContainingType<ServiceBase>();
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.ConnectImplementationsToTypesClosing(typeof(IHandle<>));
});
}
Nuget 包 StructureMap.WebApi2 创建了一些其他文件来连接分辨率和嵌套容器,但为了简洁起见,我将它们排除在这个问题之外。
【问题讨论】:
标签: entity-framework dependency-injection asp.net-web-api2 structuremap dbcontext