【发布时间】:2021-09-13 02:28:50
【问题描述】:
我使用 ASP.NET Core 2.2 我正在尝试从 Startup 调用基本服务类。它抛出了这个异常:
InvalidOperationException:无法解析服务类型 尝试激活时出现“TIR.NetCore.ICommonLogService” 'AdminCentral.NetCore.Startup'。
这是我的代码:
public class Startup
{
private readonly ICommonLogService _CommonLogService;
public Startup(IConfiguration configuration, ICommonLogService CommonLogService)
{
_CommonLogService = CommonLogService;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public string connectionString;
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var container = new Container();
container.Configure(config =>
{
config.AddRegistry(new StructuremapRegistry());
config.Populate(services);
});
return container.GetInstance<IServiceProvider>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
LogException(Exception )
}
private void LogException(Exception error, HttpContext context)
{
_CommonLogService.InsertLogDetail();
}
}
【问题讨论】:
-
Startup用于配置您的服务。您不能将尚未注册的类型传递给 Startup 构造函数本身。您可以使用IHostingEnvironment、IConfiguration和ILoggerFactory,但框架不知道ICommonLogService。 -
什么类应该实现
ICommonLogService?我看不出将它注入Startup类的意义,但很可能您应该在此处实例化它,因为它是应用程序的入口点。您通常会注入代码,因为您需要对获取注入代码的类进行单元测试,但在这种情况下,我真的怀疑您是否会对Startup进行单元测试。换句话说,只需使用具体类型来创建一个新的 Logger 实例。
标签: c# asp.net-core dependency-injection