【问题标题】:Setter Injection with Unity for ActionFilter使用 Unity 为 ActionFilter 注入 Setter
【发布时间】:2012-08-21 14:32:19
【问题描述】:

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

我想使用 setter 注入来为 Action 过滤器注入依赖项。我有一个动作过滤器,我在 global.asax 中注册,这个动作过滤器调用一个存储库类来加载一些数据。我想使用 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 属性将为空。

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

【问题讨论】:

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


    【解决方案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-01-02
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多