在 ModelBinder 中实例化一个子类型对象

穆斯

我有一个基类,还有另外两个为它派生的类,这两个类的每个类都有两个派生类。我需要在我的modelBinder中根据子类型实例化我的对象,实例化相应的类

在这里查看我的代码

public class Product
{
    public ProductType ProductType;//ProductA,ProductB
}

public class ProductA : Product
{
    public subType AsubType;// AsubType ProductAH et ProductAF
}

public class ProductB : Product
{
    public subType BsubType; // BsubType ProductBC et ProductBD
}


public class ProductAH : ProductA { }

public class ProductAF : ProductA { }

public class ProductBC : ProductB { }

public class ProductBD : ProductB { }



protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
    if (modelType.Equals(typeof(Product)))
    {               
        //instantiate a object ProductAH or ProductAF or BC or BD according to subtype

        Type instantiationType = typeof(xxxx);
        var obj = Activator.CreateInstance(instantiationType);
        bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, instantiationType);
        bindingContext.ModelMetadata.Model = obj;
        return obj;
    }
    else 
    {
        return base.CreateModel(controllerContext, bindingContext, modelType);
    }
}
穆斯

我用这段代码解决了我的问题:

var keySubType = bindingContext.ModelName.ToString() + "."+"SubType";
string subtypeName = bindingContext.ValueProvider.GetValue(keySubType).AttemptedValue;

Type instantiationType = null;
switch (subtypeName)
{
    case "ProductAH":
        instantiationType = typeof(ProductAH );
        break;
    case "ProductAF":
        instantiationType = typeof(ProductAF );
        break;
    case "ProductBC":
        instantiationType = typeof(ProductBC );
        break;
    case "ProductBD":
        instantiationType = typeof(ProductBD );
        break;
}

//Create an instance of the specified type
var obj = Activator.CreateInstance(instantiationType);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ModelBinder反序列化任意json

来自分类Dev

ModelBinder反序列化任意json

来自分类Dev

WebApi字符串操作中的ModelBinder

来自分类Dev

WebApi字符串操作中的ModelBinder

来自分类Dev

对于一个特定的ViewModel,ModelBinder返回null

来自分类Dev

对于一个特定的ViewModel,ModelBinder返回null

来自分类Dev

Modelbinder创建集合项目的新实例,而不是更新现有实例

来自分类Dev

Modelbinder创建集合项目的新实例,而不是更新现有实例

来自分类Dev

如何使自定义 ModelBinder 自动应用于某种类型的所有属性

来自分类Dev

当返回null而不是控制器中设置的值时,Modelbinder默认为0

来自分类Dev

在一个子类中实例化一个类并在另一个子类中访问它的实例

来自分类Dev

WebAPI ModelBinder错误

来自分类Dev

从超类实例化一个子类

来自分类Dev

多个子类,如何实例化它们中的任何一个?

来自分类Dev

在Python中实例化时选择一个子类

来自分类Dev

如何检查一个2父类型的2个子类型的ArrayList中的变量属于哪个子类?

来自分类Dev

如何使用推土机实例化一个子类?

来自分类Dev

用初始化的父对象创建一个子类对象

来自分类Dev

是否可以在另一个子类中声明子类对象?

来自分类Dev

使用ModelBinder的Swashbuckle和Web Api方法

来自分类Dev

ASP.NET:仅将Modelbinder委托

来自分类Dev

测试一个对象是否是另一个实例类型的子类

来自分类Dev

将子类模型实例转换为Django中的另一个子类模型实例?

来自分类Dev

多个子类继承其父类的一个实例

来自分类Dev

实例化一个对象的类型取决于另一个对象的类型

来自分类Dev

Java问题:一个子类的构造函数中的计算会影响另一子类的实例的字段

来自分类Dev

创建一个子类的多个实例,只有一个超类的实例

来自分类Dev

Python:对于超类中定义的运算符,我可以有一个子类返回其自身类型的实例吗?

来自分类Dev

在构造方法中返回一个子类

Related 相关文章

  1. 1

    ModelBinder反序列化任意json

  2. 2

    ModelBinder反序列化任意json

  3. 3

    WebApi字符串操作中的ModelBinder

  4. 4

    WebApi字符串操作中的ModelBinder

  5. 5

    对于一个特定的ViewModel,ModelBinder返回null

  6. 6

    对于一个特定的ViewModel,ModelBinder返回null

  7. 7

    Modelbinder创建集合项目的新实例,而不是更新现有实例

  8. 8

    Modelbinder创建集合项目的新实例,而不是更新现有实例

  9. 9

    如何使自定义 ModelBinder 自动应用于某种类型的所有属性

  10. 10

    当返回null而不是控制器中设置的值时,Modelbinder默认为0

  11. 11

    在一个子类中实例化一个类并在另一个子类中访问它的实例

  12. 12

    WebAPI ModelBinder错误

  13. 13

    从超类实例化一个子类

  14. 14

    多个子类,如何实例化它们中的任何一个?

  15. 15

    在Python中实例化时选择一个子类

  16. 16

    如何检查一个2父类型的2个子类型的ArrayList中的变量属于哪个子类?

  17. 17

    如何使用推土机实例化一个子类?

  18. 18

    用初始化的父对象创建一个子类对象

  19. 19

    是否可以在另一个子类中声明子类对象?

  20. 20

    使用ModelBinder的Swashbuckle和Web Api方法

  21. 21

    ASP.NET:仅将Modelbinder委托

  22. 22

    测试一个对象是否是另一个实例类型的子类

  23. 23

    将子类模型实例转换为Django中的另一个子类模型实例?

  24. 24

    多个子类继承其父类的一个实例

  25. 25

    实例化一个对象的类型取决于另一个对象的类型

  26. 26

    Java问题:一个子类的构造函数中的计算会影响另一子类的实例的字段

  27. 27

    创建一个子类的多个实例,只有一个超类的实例

  28. 28

    Python:对于超类中定义的运算符,我可以有一个子类返回其自身类型的实例吗?

  29. 29

    在构造方法中返回一个子类

热门标签

归档