您好我在我的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。
有关如何使其正常工作的任何指示?
答案 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>());
}