Използвам Autofac IOC с валидиране на constructor. Не мога да разбера как да регистрирам класовете в 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
}
}
IService
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
}
}
AdService
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