Не могу понять, как вводить LinkGenerator - PullRequest
0 голосов
/ 18 июня 2019

Итак, я знаю, как настроить мой контроллер так, чтобы я мог принимать LinkGenerator, введенный в контроллер.Чего я не могу понять, так это как внедрить мой контроллер при запуске с помощью LinkGenerator.

Контроллер

protected readonly LinkGenerator _linkGenerator;

public SomeController(config config, LinkGenerator linkGenerator)
{
        config = Config;
        _linkGenerator = linkGenerator;
}

StartUp - ConfigureServices

Controllers.SomeController someController = new 
Controllers.SomeController(config, linkGenerator); //how do I get an 
instance of link generator here.

служб.AddSingleton (someController);

Я пробовал это в методе запуска Configure, но ConfigureServices запускается до настройки

app.Use(async (context, next) =>
{
     linkGenerator = context.RequestServices.GetService<LinkGenerator>();
});

Чего мне не хватает?

1 Ответ

0 голосов
/ 19 июня 2019

Попробуйте следующий подход в ConfigureServices of Startup.cs

public Startup(IConfiguration configuration , IHttpContextAccessor accessor)
{
    Configuration = configuration;
    _accessor = accessor;
}

public readonly IHttpContextAccessor _accessor;
public IConfiguration Configuration { get; }

var linkGenerator = _accessor.HttpContext.RequestServices.GetService<LinkGenerator>();
services.AddScoped<LinkGenerator>();
services.AddTransient(ctx =>
            new ValuesController(linkGenerator));

Контроллер

private readonly LinkGenerator _linkGenerator;

public ValuesController(LinkGenerator linkGenerator)
{
     _linkGenerator = linkGenerator;
}

Ссылка: https://andrewlock.net/controller-activation-and-dependency-injection-in-asp-net-core-mvc/

...