Autofac正在注册特定的方法参数类型

本文关键字:方法 参数 类型 注册 Autofac | 更新日期: 2023-09-27 17:57:55

我正在使用带有constructor验证的Autofac IOC。我不知道如何在IOC中注册这些类,以便LogotypeService获得LogoImageValidatorAdService获得注入其构造函数中的AdValidator

我不想指定应该注入SomeClass的哪个实例。

我有:

  • 一个验证接口(IImageValidator)
  • 通用验证逻辑的一个基类(ImageValidatorBase)
  • 拥有特定验证逻辑的两个子类(LogoImageValidator和AdImageValidator)
  • 一个服务接口(IService)
  • 两个服务,每个服务都应该使用不同的子类进行验证。(LogotypeService应使用LogoImageValidator)和(AdService应使用AdValidator)

接口

public interface IImageValidator
{
    bool ValidFileSize();
}

基类:

public abstract class ImageValidatorBase : IImageValidator
{    
    //constructor omitted
    Public abstract ValidFileSize()
    {
       //shared code
    }
}

子类LogoImageValidator

public class LogoImageValidator : ImageValidator
{
    //constructor omitted
    public override bool ValidFileSize()
    {
        //class specific code
    }
}

子类AdImageValidator

public class AdImageValidator : ImageValidator
{
    //constructor omitted
    public override bool ValidFileSize()
    {
        //class specific code
    }
}

I服务

public interface IService{
    bool ValidFileSize();
}

LogotypeService

 public class LogotypeService : IService
 {
    private readonly ISomeClass _someClass;
    private readonly IImageValidator _imageValidator;
    public LogotypeService(ISomeClass someClass, IImageValidator imageValidator)
    {
        _someClass = someClass;
        _imageValidator = imageValidator;
    }
    public bool ValidFileSize()
    {
       _imageValidator.ValidFileSize();//use LogoImageValidator subclass here            
    }
}

广告服务

 public class AdService : IService
 {
    private readonly ISomeClass _someClass;
    private readonly IImageValidator _imageValidator;
    public AdService(ISomeClass someClass, IImageValidator imageValidator)
    {
        _someClass = someClass;
        _imageValidator = imageValidator;
    }
    public bool ValidFileSize()
    {
       _imageValidator.ValidFileSize();//use AdValidator subclass here    
    }
}

有什么想法吗?

Autofac正在注册特定的方法参数类型

这似乎与这个问题重叠:用Autofac 注入特定类型

答案表明,可以根据上下文使用不同的接口。