Autofac正在注册特定的方法参数类型
本文关键字:方法 参数 类型 注册 Autofac | 更新日期: 2023-09-27 17:57:55
我正在使用带有constructor验证的Autofac IOC。我不知道如何在IOC中注册这些类,以便LogotypeService
获得LogoImageValidator
,AdService
获得注入其构造函数中的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 注入特定类型
答案表明,可以根据上下文使用不同的接口。