簡單筆記下如何統一呼叫共用介面的複數實作 (class)
結論
ITestManager
public interface ITestManager
{
string GetString();
}
OneManager
public class OneManager : ITestManager
{
public string GetString() => "One";
}
TwoManager
public class TwoManager : ITestManager
{
public string GetString() => "Two";
}
TestDomainModule
public class TestDomainModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
// 手動新增 DI 設定
context.Services.AddTransient<ITestManager, OneManager>();
context.Services.AddTransient<ITestManager, TwoManager>();
}
}
TestDomainTests
[Fact]
public async Task Should_Get_Two_Results_From_ITestManager()
{
var managers = GetRequiredService<IEnumerable<ITestManager>>();
var results = managers.Select(manager => manager.GetString()).ToList();
results.Count.ShouldBeGreaterThan(1);
_testOutputHelper.WriteLine(string.Join(",",results));
}

重點
- 手動註冊每個實作到該介面
- 改取得 IEnumerable 該介面
參照
