如何将对象转换为泛型类型?

the*_*ist 4 .net c# structuremap

我有很多实现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();
     }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用StructureMap来注册继承IBuilder <>的所有类

Scan(x =>
{
       x.TheCallingAssembly();
       x.AddAllTypesOf(typeof(IViewModelBuilder<>));                
});
Run Code Online (Sandbox Code Playgroud)

更新

现在,每次我需要获得一些模块的模型我都会调用Do函数

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("");            
}
Run Code Online (Sandbox Code Playgroud)

我在行中遇到编译错误ObjectFactory.GetInstance(t) as IViewModelBuilder<>.许多帖子建议创建NOT通用接口(IViewModelBuilder)并让通用接口继承它.然后我就可以像铸造一样

ObjectFactory.GetInstance(t) as IViewModelBuilder
Run Code Online (Sandbox Code Playgroud)

这是唯一的方法吗?

谢谢

Val*_*zub 5

您的代码DoGetInstance应该是通用的.基本上它可能看起来像这样

public T Do<T> ()
{
     return ObjectFactory.GetInstance<T>().Create();
}
Run Code Online (Sandbox Code Playgroud)