gpt4 book ai didi

c# - 如何在 ConfigureServices .Net Core 3.1 中注册具有多个接口(interface)的服务并将该服务用作单个实例

转载 作者:行者123 更新时间:2023-12-05 09:02:50 24 4
gpt4 key购买 nike

我有实现多个接口(interface)的服务;例如

ServiceClass : IService1, IService2
{
// implementation
}

现在我需要在 ConfigureServices() 中注册此服务,这样我就有一个 SerivceClass 实例,即使通过构造函数注入(inject) IService1 或 IService2 也可以使用此实例。例如,

public class SomeClass1: ISomeClass1
{
SomeClass1(IService1 service)
{
...
}
}

public class SomeClass2 : SomeClass2
{
SomeClass2(IService2 service)
{
...
}
}

我尝试在 ConfigureServices() 中使用它的两个接口(interface)注册 ServiceClass,但它会创建多个实例。

ConfigureServices(){

...
services.AddSingleton<IService1, ServiceClass>();
services.AddSingleton<IService2, ServiceClass>();
services.AddSingleton<ISomeClass1>(
x => new SomeClass1(
x.GetRequiredService<IService1>(),
));

services.AddSingleton<ISomeClass2>(
x => new SomeClass2(
x.GetRequiredService<IService2>(),
));
....
}

我需要找到一个解决方案,即使注入(inject)的接口(interface)不同,我也可以将相同的实例注入(inject) SomeClass1 和 SomeClass2。

最佳答案

解决这个问题的一种方法是注册实现类,然后从中显式解析多个接口(interface):

services.AddSingleton<ServiceClass>();
services.AddSingleton<IService1, ServiceClass>(x => x.GetRequiredService<ServiceClass>());
services.AddSingleton<IService2, ServiceClass>(x => x.GetRequiredService<ServiceClass>());

有一个这种方法的例子 used here以 HttpClientFactory 为例。

关于c# - 如何在 ConfigureServices .Net Core 3.1 中注册具有多个接口(interface)的服务并将该服务用作单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70758009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com