我有实现多个接口的服务;例如
ServiceClass : IService1, IService2
{
// implementation
}
Run Code Online (Sandbox Code Playgroud)
现在我需要在 ConfigureServices() 中注册此服务,这样我就有一个 SerivceClass 实例,并且即使通过构造函数注入 IService1 或 IService2 也可以使用该实例。对于前,
public class SomeClass1: ISomeClass1
{
SomeClass1(IService1 service)
{
...
}
}
public class SomeClass2 : SomeClass2
{
SomeClass2(IService2 service)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用它的两个接口在ConfigureServices()中注册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>(),
));
....
}
Run Code Online (Sandbox Code Playgroud)
我需要找到一个解决方案,即使注入的接口不同,我也可以将相同的实例注入 SomeClass1 和 SomeClass2 。
Mar*_*llo 13
解决此问题的一种方法是注册实现类,然后从中显式解析多个接口:
services.AddSingleton<ServiceClass>();
services.AddSingleton<IService1, ServiceClass>(x => x.GetRequiredService<ServiceClass>());
services.AddSingleton<IService2, ServiceClass>(x => x.GetRequiredService<ServiceClass>());
Run Code Online (Sandbox Code Playgroud)
例如,这里有一个针对HttpClientFactory使用此方法的示例。
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |