Autofac регистрирует определенный тип параметра метода

Я использую 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    
    }
}

Любые идеи?


person Tim Hansson    schedule 11.04.2014    source источник
comment
Какие методы есть в вашем IService интерфейсе?   -  person Steven    schedule 11.04.2014
comment
Привет, я добавил IService в свое последнее редактирование. Он предоставляет: bool ValidFileSize()   -  person Tim Hansson    schedule 11.04.2014
comment
Это несколько совпадает с этим: 16699588/   -  person Travis Illig    schedule 12.04.2014
comment
Привет @TravisIllig. Ваша ссылка действительно решила проблему. Спасибо!   -  person Tim Hansson    schedule 16.04.2014
comment
Я добавлю это как ответ, чтобы люди знали, что на вопрос дан ответ.   -  person Travis Illig    schedule 17.04.2014


Ответы (1)


Похоже, что это совпадает с этим вопросом: Внедрение определенного типа с помощью Autofac

Ответ там предполагает использование разных интерфейсов в зависимости от контекста.

person Travis Illig    schedule 16.04.2014