我正在使用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;没帮我。
谢谢, 埃米尔