概述
一般情况下我们都是使用一个接口一个实现类,但是有一些情况,我们为了实现多态,我们会定义一个接口,多个实现类。
依赖注入
依赖注入(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}");
}
}