在netcore中如何注入同一个接口的多个实现

概述

一般情况下我们都是使用一个接口一个实现类,但是有一些情况,我们为了实现多态,我们会定义一个接口,多个实现类。

依赖注入

依赖注入(Dependency Injection),是这样一个过程:由于某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不直接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,然后将其注入到客户类中,保证客户类的正常运行。.

代码实现

1、定义接口、实现接口、注册服务

   public class CaseNumberAnalyzer : BaseAnalyzer, IAnalyzer
    {
        public CaseNumberAnalyzer(
            IDmsCacheService dmsCacheService,
            IFeatureService featureService)
            : base(dmsCacheService, featureService)
        {
        }


 services.AddTransient<IAnalyzer, CaseNumberAnalyzer>();
            services.AddTransient<IAnalyzer, NaturalPersonAnalyzer>();
            services.AddTransient<IAnalyzer, ThousandthAnalyzer>();
            services.AddTransient<IAnalyzer, PunctuationChaosAnalyzer>();
复制代码

2、构造函数注入

    private readonly IEnumerable<IAnalyzer> analyzers;
      

        public CharacterService(
            IEnumerable<IAnalyzer> anlyzers,
        )
        {
            this.analyzers = anlyzers;
         
        }
复制代码

3、循环获取实现

   foreach (var analyzer in this.analyzers)
                {
                    try
                    {
                        if (analyzer.GetType().FullName == "XXXX.Service.XXXAnalyzer")
                        {
                          //TODO
                        }
                    }
                    catch (Exception ex)
                    {
                        this.logger.LogError($"{ex.Message}\r\n{ex.StackTrace}");
                    }
                }