public interface IProcessor<T>
{
void Process(T instance);
}
foreach(AbstractType instance in myClass.SomeCollection)
OnProcess(instance);
public void OnProcess<T>(T instance)
{
IProcessor<T> processor =
unityContainer.Resolve<IProcessor<T>>();
processor.Process(instance);
}
Проблема с этим кодом является то, что в
OnProcess
всегда AbstractType
, а не конкретный тип экземпляра, который передается. В настоящее время я вижу две возможности.Вызов общий интерфейс
01: Создайте не общий IProcessor
и используйте его как базу для IProcessor
. Любой разработчик должен будет реализовать как общие, так и не общие методы Process
, обычно типизируя и передавая общий метод.
02: Используйте Type.MakeGenericType
, чтобы получить IProcessor
, разрешите это, а затем используйте отражение, чтобы вызвать метод процесса.
Оба эти подхода чувствуют себя немного «нечистыми». Может ли кто-нибудь подумать о том, как я могу это сделать, не прибегая к этим методам?
Благодаря
Пит
Мне только удалось обойтись, чтобы зайти на этот сайт. Забавно, что ваше предложение SomeBase - это именно то, что я придумал сегодня утром, отправив письмо с г-ном Скитом по теме :-) Спасибо! –
Как пометить ваш ответ как правильный? –
Я думаю, вы нашли его; -p –