在我的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;
};
});但是,如果我添加一个断点,我会在每次请求时看到它的命中。
我是否遗漏了什么,或者是预期的行为?
发布于 2020-01-15 18:12:56
这是预期的行为,因为作用域的生存期意味着对象将在每个请求中初始化一次。因此,您的实现因子委托将在每次请求API时调用,而不是每次调用服务容器时调用(瞬态)。
作用域
每个客户端请求(连接)创建一次作用域生命周期服务(AddScoped)。
https://stackoverflow.com/questions/59745083
复制相似问题