【发布时间】:2020-01-15 18:12:55
【问题描述】:
在我的 ConfigureServices 中,我有许多注册服务,例如:
services.AddScoped<IService1,Service1>();
services.AddScoped<IService2,Service2>();
services.AddScoped<IService3,Service3>();
如果我现在在上面的每一个上都设置一个断点,我会得到预期的行为,即在启动期间断点按预期被命中一次。
但是我现在注册了另一个服务,如下所示:
services.AddScoped<IWCFService>(service =>
{
using (var scope = service.CreateScope())
{
var settingData = scope.ServiceProvider.GetRequiredService<AppSettingsDB>();
var client = new WCFServiceClient(
WCFServiceClient.EndpointConfiguration.WCF,
settingData.Url);
client.Endpoint.EndpointBehaviors.Add(
new InspectorBehavior<IWCFServiceClient>(settingData.EnableLog));
return client;
};
});
上面的工作正常,但是如果我添加一个断点,我每次请求都会看到它的命中。
我错过了什么还是预期的行为?
【问题讨论】:
-
需要澄清一下。当您说
hit every time on every request时,您的意思是针对每个注入它的位置还是针对向 api 发出的每个 HTTP 请求? Scoped 生命周期意味着每个 HTTP 请求范围使用一次,因此这是预期的行为 -
对于每个 API 请求。之前没有观察到这种行为,所以它可能是正常的,但其他服务上的其他断点不会受到影响。
标签: dependency-injection asp.net-core-3.1