Возможно, я пытаюсь «неправильно использовать» Unity здесь, но мне бы хотелось, чтобы Unity создала новый класс, не основанный на интерфейсе, который реализует класс newe'd up, а основанный на другом классе..
Это связано с разрешением конкретного типа DataMapper на основе имени объекта домена, передаваемого в вызов метода в объекте DataContext (в данном случае это конкретный DataContext для Sql Server)
protected override IDataMapper<T> GetDataMapper<T>()
{
if (typeof(T) == typeof(Expert))
{
return (IDataMapper<T>)new ExpertDataMapper();
}
else if (typeof(T) == typeof(Case))
{
return (IDataMapper<T>)new CaseDataMapper();
}
else if (typeof(T) == typeof(CaseFile))
{
return (IDataMapper<T>)new CaseFileDataMapper();
}
etc... etc...
}
Вы получите точку.
в этом случае T будет именем объекта домена, а НЕ именем DataMapper, который реализует интерфейс IDataMapper ... так что вызовэто:
IDataMapper<T> mapper = (IDataMapper<T>)container.Resolve(t);
не удается.
В вызове GetDataMapper используются универсальные шаблоны, и на основе имени объекта домена (скажем, «Эксперт») я хочу создать экземпляр объекта ExpertDataMapper,и вернуть это.
Что мне не нужно, так это «тупой» фабричный подход, в котором содержится огромный список операторов case ... особенно, когда приходит время добавлять новые доменные объекты и онисвязанные DataMappers.Я предпочел бы справиться с этим в разделе конфигурации моего файла App.config и НЕ должен входить, изменять код, перекомпилировать и затем выпускать в производство.
Может быть, Unity - неподходящий инструмент для работы?
Спасибо!Mike