我有一个类,我用它注册为GlobalFilter来处理execpions。我在global.asax上注册,一切都很好
当我的操作中发生异常时,我输入OhException方法并获得NullReference异常,因为LogManager属性为null
为什么inject不注入它?
public class HandleErrorFilterAttribute : HandleErrorAttribute
{
[Inject]
public ILogManager LogManager { get; set; }
public override void OnException(ExceptionContext filterContext)
{
LogManager.LogError("Unhandled exception thrown", filterContext.Exception);
base.OnException(filterContext);
}
}
这个代码下面的服务注入(我忘了写它)
kernel.Bind<ILogManager>().To<LogManager>();
在那里我创建了对象
public void RegisterGlobalFilters()
{
var handleErrorAttribute = new HandleErrorFilterAttribute();
GlobalFilters.Filters.Add(handleErrorAttribute);
}
默认情况下,属性由CLR创建,而不是由DI库创建。DI库只能在它自己创建的对象中注入依赖项,或者当你明确告诉它"构建"这个对象时。因此,如果您自己new
up对象或让CLR创建属性,DI库就没有机会向其中注入依赖项。