C# Autofac属性注入不工作
我检查了这些答案:C# Autofac属性注入不工作,c#,asp.net-web-api,autofac,C#,Asp.net Web Api,Autofac,我检查了这些答案: 但是,我的代码看起来设置正确,但属性注入不起作用 这是我的Autofac注册: public static AutofacWebApiDependencyResolver Setup() { var config = GlobalConfiguration.Configuration; var builder = new ContainerBuilder(); builder.Register(x => new LogService()
public static AutofacWebApiDependencyResolver Setup()
{
var config = GlobalConfiguration.Configuration;
var builder = new ContainerBuilder();
builder.Register(x => new LogService())
.As<ILogService>()
.SingleInstance();
builder.RegisterType<ExceptionHandlingAttribute>().PropertiesAutowired();
var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
但是,logService为null。有什么问题
编辑
我根据下面的注释更改了属性,因此属性类现在如下所示:
internal class ExceptionHandlingAttribute : IAutofacExceptionFilter
{
public ILogService logService { get; set; }
public void OnException(HttpActionExecutedContext filterContext) { }
}
builder.RegisterWebApiFilterProvider(config);
builder.RegisterType<ExceptionHandlingAttribute>()
.AsWebApiExceptionFilterFor<BaseODataController>()
.InstancePerRequest()
.PropertiesAutowired();
我还必须删除添加到WebApiConfig中config.Filters的过滤器
我更改了Autofac注册,如下所示:
internal class ExceptionHandlingAttribute : IAutofacExceptionFilter
{
public ILogService logService { get; set; }
public void OnException(HttpActionExecutedContext filterContext) { }
}
builder.RegisterWebApiFilterProvider(config);
builder.RegisterType<ExceptionHandlingAttribute>()
.AsWebApiExceptionFilterFor<BaseODataController>()
.InstancePerRequest()
.PropertiesAutowired();
builder.registerWebAPI过滤器提供程序(配置);
builder.RegisterType()
.aswebapieexceptionfilterfor()
.InstancePerRequest()
.属性自动连线();
但是,现在我遇到了以下异常(可能是Autofac试图定位过滤器):
对象引用未设置为对象的实例。“,”类型“:”System.NullReferenceException“,”stacktrace“:”位于Autofac.Integration.WebApi.AutofacWebApiFilterProvider.GetFilters(HttpConfiguration配置,HttpActionDescriptor actionDescriptor)\r\n位于System.Web.Http.Controllers.HttpActionDescriptor.b\u 0(IFilterProvider fp)\r\n位于System.Linq.Enumerable.d_u14`2.MoveNext()\r\n等等等。Autofac不会在web.api中插入操作过滤器。您需要使用文档中描述的自定义
IAutofacExceptionFilter