ActionFilterAttribute上的简单注入器MVC5属性注入不起作用

时间:2015-08-16 23:13:31

标签: asp.net-mvc dependency-injection simple-injector

我正在使用Simple Injector处理我的MVC5项目,我遇到了继承自ActionFilterAttribute的自定义类属性的DI问题。

通过文档阅读我发现没有办法如何使用构造函数注入过滤器,并且这是一个属性注入,但默认情况下是允许的。

阅读更多文档我已经编辑了我的代码以启用属性注入,但是当我运行项目时,我仍然得到NullReferrenceException,因为该属性似乎根本没有被注入。 / p>

这是我的代码:

在App_Start文件夹中,我有SimpleInjectorConfig.cs个文件:

public class SimpleInjectorConfig
{
    public static void Config()
    {
        // Create the container as usual.
        var container = new Container();

        container.Options.PropertySelectionBehavior = new ImportPropertySelectionBehavior();


        // Register your types, for instance:
        container.Register<IUserService, UserService>();

        // This is an extension method from the integration package.
        container.RegisterMvcControllers(Assembly.GetExecutingAssembly());

        // This is an extension method from the integration package as well.
        container.RegisterMvcIntegratedFilterProvider();

        container.Verify();

        DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
    }
}

class ImportPropertySelectionBehavior : IPropertySelectionBehavior
{
    public bool SelectProperty(Type type, PropertyInfo prop)
    {
        return prop.GetCustomAttributes(typeof(ImportAttribute)).Any();
    }
}

Config()方法调用Global.asax - Application_Start()方法。

我的自定义过滤器类如下所示:

public class DatabaseCheckAttribute : ActionFilterAttribute
{
   [Import]
   public IUserService UserService { get; set; }

   public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //code omitted for better readability
    }
}

我不知道我是否遗漏了Simple Injector文档中的内容,但无论如何,IUserService类的DatabaseCheckAttribute属性仍然为null。

更新

这在我看来并不重复这个question,因为基本上解决方案建议有隐式属性注入,这在我的情况下不起作用。换句话说,我知道我需要使用隐式/显式属性解决方案,但是因为跟随&#39; howtos&#39;没帮我。

谢谢, 埃米尔

0 个答案:

没有答案