1

嗨,我在 MVC 3 应用程序中使用MS Unity Container 。

我想使用 setter 注入来为 Action 过滤器注入依赖项。我有一个动作过滤器,我在 global.asax 中注册,这个动作过滤器调用一个存储库类来加载一些数据。我想使用 DI 注入具体类。使用 StructureMap可以很容易地实现它。但不知何故,我无法让它与 Unity 一起使用。我已经尝试了此链接中的所有解决方案。

这是我的代码:

MyActionFilter.cs

public class GlobalViewBagActionFilter : ActionFilterAttribute
{
    public IUserRepo UserRepo { get; set; }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var testVal = UserRepo.LoadData();
    }
}

在 Global.asax.cs 中注册动作过滤器

private static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new GlobalViewBagActionFilter());
    }

在 Appliation_Start 上调用上述方法进行注册

RegisterGlobalFilters(GlobalFilters.Filters);

我已经尝试了许多可能的代码块来注册课程,但没有任何效果。要么我会得到一个异常,要么在操作过滤器上,UserRepo 属性将为空。

关于如何让它工作的任何指示?

4

1 回答 1

1

您需要设置容器:

private static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    var container = new UnityContainer()
       .RegisterType<IUserRepo, UserRepoImpl>()

       .RegisterType<GlobalViewBagActionFilter>(
           new InjectionProperty("UserRepo", new ResolvedParameter<IUserRepo>()) 
       );


    filters.Add(container.Resolve<GlobalViewBagActionFilter>());
}
于 2012-08-21T06:32:19.603 回答