我将StructureMap
用于DI
,设置如下:
private static void Ioc()
{
ObjectFactory.Initialize(x =>
{
x.For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<myContext>();
x.Scan(config =>
{
config.AssemblyContainingType<ICityService>();
config.WithDefaultConventions();
});
});
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
我在ActionFilterAttribute
中有一个ActionFilter
,想要获得这样一个对象的实例:
public Permission(string controllerName)
{
_uow = ObjectFactory.GetInstance<IUnitOfWork>();
_SettingService = ObjectFactory.GetInstance<ISettingService>();
}
但是当这个课程运行四次或更多次时,我收到了这个错误:
由于
DbContext
已被处置,无法完成操作。
我无法继续。如果我更改这些行:
_uow = ObjectFactory.GetInstance<IUnitOfWork>();
_SettingService = ObjectFactory.GetInstance<ISettingService>();
并删除对容器的依赖:
_uow = new myContext();
_SettingService = new SettingService(_uow);
一切正常,但我有问题 - SettingService
中的数据总是不同的,因为实例之间的上下文不一样。