При кодировании приложения с использованием ASP.NET Web API 2 Мне удалось добиться Инъекции свойства на уровне фильтра с использованием Autofac .
(приведенный ниже пример относится к неосновному веб-API ASP.NET)
builder.Register(x => new MyCustomGlobalActionFilter())
.AsWebApiActionFilterOverrideFor<MyCustomController>()
.InstancePerRequest()
.PropertiesAutowired();
Несколько замечаний:
- мы должны зарегистрировать его для любогоКонтроллер выглядит так:
.AsWebApiActionFilterOverrideFor<MyCustomController>()
- следующий бит используется для включения Внедрение свойства :
.PropertiesAutowired()
Сам фильтр действия выглядит немного необычно, так какПока он тесно связан с Autofac - мы реализуем интерфейс IAutofacActionFilter
.
Затем я могу разрешать службы на уровне фильтра с помощью внедрения свойства, вот пример кода:
public class MyCustomGlobalActionFilter : IAutofacActionFilter
{
public Session Session { get; set; }
public DbContextWithUserAuditing DbContext { get; set; }
public ITenantService TenantService { get; set; }
public Task OnActionExecutingAsync(
HttpActionContext actionContext,
CancellationToken cancellationToken
)
{
string userId = null;
int? tenantId = null;
var claimsIdentity = actionContext.RequestContext.Principal as ClaimsPrincipal;
// do some stuff
return Task.FromResult(0);
}
public Task OnActionExecutedAsync(
HttpActionExecutedContext actionExecutedContext,
CancellationToken cancellationToken
)
{
return Task.FromResult(0);
}
}
Итак, по порядкучтобы разрешить службы в качестве свойств, мы просто объявляем их следующим образом:
public Session Session { get; set; }
public DbContextWithUserAuditing DbContext { get; set; }
public ITenantService TenantService { get; set; }
Мой вопрос: Есть ли способ разрешить службы путем внедрения свойств в фильтр с использованием Autofac в ASP.NET Core
?