#c# #asp.net-core #dependency-injection #blazor
#c# #asp.net-ядро #внедрение зависимостей #blazor
Вопрос:
Я хочу использовать службу с ограниченной областью действия в методе одноэлементной службы в Блейзоре на стороне сервера. Я узнал, что вы можете использовать [FromServices]
атрибут в параметрах функции, но когда я вызываю метод, я получаю ошибку компилятора за вызов метода с меньшим количеством параметров. Я попытался вызвать метод с фиктивным параметром в надежде, что он будет перезаписан при вызове, но это было не так.
Служба с ограниченной областью действия:
public class UserContext
{
public string SomeUserRelatedData {get; set;}
}
Одноэлементный сервис:
public class GlobalService
{
...
public void DoSomethingWithUserData([FromServices]UserContext usercontext)
{
...
}
}
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<GlobalService>();
services.AddScoped<UserContext>();
}
}
Комментарии:
1. Не уверен, работает ли это только в контроллерах? «Указывает, что параметр действия должен быть привязан с использованием служб запросов «. — FromServicesAttribute
Ответ №1:
К сожалению, вы не можете этого сделать.
Вы можете использовать это [FromServices]
только в методе, который вызывается фреймворком. В этом случае в любом действии от контроллера или в Invoke
методе в промежуточном программном обеспечении.
Но есть решение вашей проблемы. Я предполагаю, что вызываемый метод DoSomethingWithUserData
является областью видимости. В этот класс (или метод, если это конечная точка) вы можете ввести свой UserContext
и вызвать метод из GlobalService
этого экземпляра.