Я использую 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
}
}
АйСервис
public interface IService{
bool ValidFileSize();
}
ЛоготипСервис
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
}
}
Любые идеи?
IService
интерфейсе? - person Steven   schedule 11.04.2014