У меня есть много классов, которые реализуют интерфейс IBuilder <> , такой как ниже
ОБНОВЛЕНО: каждая Model1, Model2 ... наследуется от IModel
public class A : IBuilder<Model1>
{
public Model1 Create(string param)
{
return new Model1();
}
}
public class B : IBuilder<Model2>
{
public Model2 Create(string param)
{
return new Model2();
}
}
Я использую StructureMap для регистрации всех классов, которые наследуют IBuilder <>
Scan(x =>
{
x.TheCallingAssembly();
x.AddAllTypesOf(typeof(IViewModelBuilder<>));
});
ОБНОВЛЕНО
Сейчас,каждый раз, когда мне нужно получить модель какого-то модуля, я вызываю Do function
public IModel Do(Module module)
{
//ModelSettings is taken from web.config
var builderType = Type.GetType(string.Format("{0}.{1}ModelBuilder,{2}", ModelSettings.Namespace, module.CodeName, ModelSettings.Assembly));
var builder = ObjectFactory.GetInstance(t) as IViewModelBuilder<>;
return builder.Create("");
}
Я получаю ошибку компиляции в строке ObjectFactory.GetInstance(t) as IViewModelBuilder<>
.Многие посты предлагают создать NOT универсальный интерфейс (IViewModelBuilder) и позволить универсальному наследовать его.И тогда я мог бы сделать кастинг как
ObjectFactory.GetInstance(t) as IViewModelBuilder
Это единственный способ?
Спасибо