Ada*_*zek 5 c# dependency-injection .net-core asp.net-core-3.0
Microsoft.Extensions.DependencyInjection.IServiceScope
我在课堂上注入时遇到问题。
我的服务实现:
public class AccountService : IAccountService
{
private readonly IConfiguration _configuration;
private readonly IServiceScope _services;
public AccountService(
IConfiguration configuration,
IServiceScope services) // <-- I can't inject this
{
_configuration = configuration;
_services = services;
}
public async Task CreateAccount(ExternalAccount externalAccount)
{
(some code...)
}
}
Run Code Online (Sandbox Code Playgroud)
在startup.cs中:
services.AddTransient<IAccountService, AccountService>();
Run Code Online (Sandbox Code Playgroud)
问题是项目在上述行之后崩溃并出现以下错误:
某些服务无法构建(验证服务描述符“ServiceType:IDS.Quickstart.Account.IAccountService 生命周期时出错:瞬态实现类型:IDS.Quickstart.Account.AccountService”:无法解析类型“Microsoft.Extensions”的服务。尝试激活“IDS.Quickstart.Account.AccountService”时出现 DependencyInjection.IServiceScope”。) ---> System.InvalidOperationException:验证服务描述符“ServiceType:IDS.Quickstart.Account.IAccountService 时出错”生命周期:瞬态实现类型:IDS。 Quickstart.Account.AccountService”:尝试激活“IDS.Quickstart.Account.AccountService”时无法解析类型“Microsoft.Extensions.DependencyInjection.IServiceScope”的服务。
我的代码拒绝工作的原因是什么?
Ste*_*ven 11
使用IServiceScope
MS.DI,您可以注入一个IServiceProvider
. IServiceProvider
MS.DI 将自动注入作用域为当前作用域的版本。这意味着您的类可以调用IServiceProvider.GetService
,这将导致与您调用时发生的结果相同的结果IServiceScope.ServiceProvider.GetService
。
请小心注入特定于容器的抽象,例如IServiceProvider
、IServiceScopeFactory
或IServiceScope
。如果注入到组合根之外的类中,则会导致服务定位器反模式。服务定位器有很多缺点。你的类的名称,AccountService
让我相信这个类位于你的组合根之外。
位于组合根内的类通常仅包含基础设施逻辑(无业务逻辑)。在组合根中,可以依赖 DI 容器(或其抽象),因为这部分已经对该特定 DI 容器具有非常强的依赖关系。
因此,如果可以的话,从类中提取解析实例所需的逻辑AccountService
,并将其移至仅包含基础结构逻辑的类中,并将其放置在组合根中。
归档时间: |
|
查看次数: |
6308 次 |
最近记录: |