Asp.net Core在一个界面下获取方法

时间:2017-07-04 11:15:38

标签: c# asp.net-core

如何在这样的界面下获取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 ..
}

1 个答案:

答案 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());
    }
}