[英]How to inject a property into a custom ActionFilterAttribute using StructureMap?
除海關ActionFilterAttribute外,注入在我的解決方案中可以正常工作。
這是一個示例:我想通過注入以下ActionFilterAttribute來填充屬性UserModel。
public class UserFilterAttribute : ActionFilterAttribute
{
public IUserModel UserModel { get; set; }
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
// here is my problem : this.UserModel is always null
base.OnActionExecuting(actionContext);
}
}
Global.asax.cs:
private void ConfigureDependencies()
{
Guid userId = new Guid();
// Register models
IContainer container = new Container(cfg =>
{
cfg.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
cfg.For<IFilterProvider>().Use<StructureMapFilterProvider>();
cfg.For<IUserModel>().Use<UserModel>().Ctor<Guid>().Is(userId);
cfg.SetAllProperties(x => { x.OfType<IUserModel>(); });
});
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory(container));
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
}
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
this.ConfigureDependencies();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
}
FilterConfig.cs:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new UserFilterAttribute());
}
}
嘗試將IController
添加到掃描儀
cfg.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.AddAllTypesOf<IController>();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.