c# - 如何使用 StructureMap 将属性注入(inject)自定义 ActionFilterAttribute?

标签 c# asp.net-mvc-4 structuremap custom-action-filter

除海关 ActionFilterAttribute 外,注入(inject)在我的解决方案中正常工作。
这是一个示例:我想使用注入(inject)到以下 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);
    }
}

全局.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);
}

过滤器配置.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>();
});

关于c# - 如何使用 StructureMap 将属性注入(inject)自定义 ActionFilterAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845154/

相关文章:

c# - 依赖需要根据StructureMap中请求的父类型进行不同的配置

c# - 如何配置结构图以提供具体类型的不同配置实例

c# - 将数据表导出到 Excel 文件

c# - MVVM:我应该从我的执行方法中检查我的 "CanExecute"方法吗?

c# - 如何在运行 InternetExplorerDriver Selenium 测试后终止 IEDriverServer.exe 控制台窗口

c# - 如何处理System.Data.Entity.Validation.DbEntityValidationException?

c# - 为什么 .ToList() 在 linq to entities 中耗时?

c# - 带有包含字典的参数的 Api Controller 中的 JSON.Net 始终为空

c# - RadioButtonFor 和标签

c# - 结构图 PerRequest 生命周期