我有實作多個介面的服務;例如
ServiceClass : IService1, IService2
{
// implementation
}
現在我需要在 ConfigureServices() 中注冊這個服務,這樣我就有一個 SerivceClass 實體,即使 IService1 或 IService2 是通過建構式注入的,也可以使用這個實體。例如,
public class SomeClass1: ISomeClass1
{
SomeClass1(IService1 service)
{
...
}
}
public class SomeClass2 : SomeClass2
{
SomeClass2(IService2 service)
{
...
}
}
我曾嘗試在 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>(),
));
....
}
我需要找到一個解決方案,即使注入的介面不同,我也可以向 SomeClass1 和 SomeClass2 注入相同的實體。
uj5u.com熱心網友回復:
解決此問題的一種方法是注冊實作類,然后從中顯式決議多個介面:
services.AddSingleton<ServiceClass>();
services.AddSingleton<IService1, ServiceClass>(x => x.GetRequiredService<ServiceClass>());
services.AddSingleton<IService2, ServiceClass>(x => x.GetRequiredService<ServiceClass>());
例如,這里有一個用于 HttpClientFactory 的方法示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416855.html
標籤:
上一篇:Blazor服務器應用程式路由404-找不到檔案或目錄
下一篇:在.Net6中,Controller類沒有出現。相反,可以選擇將其變成HomeController。這是更新嗎?
