gpt4 book ai didi

c# - Asp.net Core 一个接口(interface)下的get方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:10 30 4
gpt4 key购买 nike

我怎样才能像这样在一个接口(interface)下获取方法:

我的服务类:

模块 A

public class CollectorA : ICollector
{
public string CollectSomething()
{
//Do something
}
}

模块 B

public class CollectorB : ICollector
{
public string CollectSomething()
{
//Do something
}
}

模块 C

public class CollectorC : ICollector
{
public string CollectSomething()
{
//Do something
}
}

我的 ICollector 界面:

public interface ICollector
{
string CollectSomething();
}

我的 IModuleInitializer:

public interface IModuleInitializer
{
void Init(IServiceCollection serviceCollection);
}

在每个服务下我都有这样的 ModuleInitializer

public void Init(IServiceCollection serviceCollection)
{
serviceCollection.AddTransient<ICollector, CollectorA>();
serviceCollection.AddTransient<ICollector, CollectorB>();
serviceCollection.AddTransient<ICollector, CollectorC>();
}

例如,我如何通过此接口(interface)在 win 控制台应用程序中访问此方法?

我的主课:

static void Main(string[] args)
{
//Get String Values each module and show on console ..
}

最佳答案

假设如下实现

pubic class ModuleInitializer : IModuleInitializer{
public void Init(IServiceCollection serviceCollection) {
serviceCollection.AddTransient<ICollector, CollectorA>();
serviceCollection.AddTransient<ICollector, CollectorB>();
serviceCollection.AddTransient<ICollector, CollectorC>();
}
}

和原始问题中的其他类。

构建服务提供者后,您可以使用 serviceProvider.GetServices<ICollector>()扩展方法。注意是GetServices (复数)。它会返回 IEnumerable<ICollector>包含所有已注册的实现。

下面的例子展示了如何使用DI框架

static void Main(string[] args) {
var services = new ServiceCollection();
var moduleInitializer = new ModuleInitializer();
moduleInitializer.Init(services);
IServiceProvider serviceProvider = services.BuildServiceProvider();

//Get String Values each module and show on console ..
var collectors = serviceProvider.GetServices<ICollector>();
foreach(ICollector collector in collectors) {
Console.WriteLine(collector.CollectSomething());
}
}

关于c# - Asp.net Core 一个接口(interface)下的get方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44904503/

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