用于ActionFilter的Setter注入Unity

时间:2012-08-17 22:07:56

标签: asp.net-mvc-3 dependency-injection unity-container

您好我在我的MVC 3应用程序中使用MS Unity Container

我想使用setter注入为Action过滤器注入依赖项。我有一个动作过滤器,我在global.asax中注册,此操作Filter调用存储库类来加载一些数据。我想用DI注入具体的课程。它可能非常easily achieved with StructureMap。但不知怎的,我无法让它与Unity合作。我已经尝试了link的所有解决方案。

这是我的代码:

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属性为null。

有关如何使其正常工作的任何指示?

1 个答案:

答案 0 :(得分: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>());
}