我有类,我用它来注册为GlobalFilter来处理execpions。我在global.asax上注册,一切都很好。
当我的动作发生异常时,我输入OhException方法并获得NullReference异常,因为LogManager属性为null。
为什么nInject不注入它?
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);
}
答案 0 :(得分:1)
默认情况下,属性由CLR创建,而不是由DI库创建。 DI库只能在它自己创建的对象中注入依赖项,或者当您明确告诉它“构建”时。这个对象。因此,如果你自己new
对象或让CLR创建属性,DI库就没有机会将依赖注入其中。