Я нахожусь в OnResultExecuting ActionFilterAttribute
public override void OnResultExecuting(ResultExecutingContext context)
{
//here
base.OnResultExecuting(context);
}
На данный момент context.Result содержит ViewResult. Представление будет иметь (или уже имеет) внедренную службу.
@model IMyModel
@inject IMyService MyService
Я хочу вызвать метод в MyService.
public override void OnResultExecuting(ResultExecutingContext context)
{
var myService = //...
myService.DoStuff();
base.OnResultExecuting(context);
}
Как мне получить объект, который будет внедрен? Или я могу предоставить объект, который будет введен?





Я думаю, вы можете сделать это через HttpContext:
using Microsoft.Extensions.DependencyInjection;
...
var myService = context.HttpContext.RequestServices.GetService<IMyService>();
Возможно, вам нужно настроить его как Один экземпляр
Мне нужно установить его для каждого запроса, но это нормально, у меня он был по умолчанию для каждой зависимости... Но потом я получил: «Невозможно разрешить тип« MyService », потому что область жизненного цикла, к которой он принадлежит, не может быть найдена. Что, вероятно, вызвано тем, что сам ActionFilter не создается Autofac. Нужно придумать, как это сделать. В настоящее время: .AddMvc(options => options.Filters.Add<MyService>())
Это что-то делает. Он создает службу, но создает новую для представления. Однако, вероятно, это делает Autofac ... Я попытаюсь разобраться и вернуться, если это действительно решило мою проблему.