如何在这样的界面下获取Method:
我的服务类:
模块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);
}
在Every Service下我有像这样的ModuleInitializer
public void Init(IServiceCollection serviceCollection)
{
serviceCollection.AddTransient<ICollector, CollectorA>();
serviceCollection.AddTransient<ICollector, CollectorB>();
serviceCollection.AddTransient<ICollector, CollectorC>();
}
如何通过此界面访问win控制台应用程序中的此方法?
我的主要课程:
static void Main(string[] args)
{
//Get String Values each module and show on console ..
}
答案 0 :(得分:1)
假设以下实施
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());
}
}