如何在ActionFilterAttribute中获取实例

时间:2015-12-17 08:33:53

标签: c# asp.net-mvc entity-framework dependency-injection

我将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中的数据总是不同的,因为实例之间的上下文不一样。

0 个答案:

没有答案