2017-10-28 272 views
-1

enter image description here无法创建,因为Type.ContainsGenericParameters是真的

我创建一个实例使用动态反映一个实例。

var typesTR = Assembly.GetAssembly(typeof(BGenericConfigurationClass<>)).GetTypes() 
      .Where(type => 
        !string.IsNullOrEmpty(type.Namespace) && 
        (type.Namespace == "EntitiesConfiguration")) 
      .Where(type => type.BaseType != null 
          && type.BaseType.IsGenericType 
          && 
          (type.BaseType.GetGenericTypeDefinition() == typeof(BGenericConfigurationClass<>) || 
          type.BaseType.GetGenericTypeDefinition() == typeof(CGenericConfigurationClass<>))); 

foreach (var type in typesTR) 
{ 

    dynamic configurationInstance = Activator.CreateInstance(type); 
    modelBuilder.Configurations.Add(configurationInstance); 
} 

enter image description here

和我的异常以下内容: - “无法创建CGenericConfigurationClass`1 [T]的实例,因为Type.ContainsGenericParameters是真实的。”

+0

该图像根本没有帮助。请删除它并显示代码。另外,请注意,EF有一个内置函数来发现程序集中的“EntityTypeConfiguration”类。 –

+0

提供您的实时电子邮件以获取确切的代码。 –

+0

我想使用ef的EntityTypeConfiguration类的多级继承。给我任何想法或任何解决方案。 –

回答

1

它看起来像typesTR中的一种类型是泛型类型,并且您正试图创建该类型的实例而不指定泛型类型参数。例如,这就好像您试图创建List<>的实例,但未提供尖括号<>之间的类型。这是不可能的,Activator.CreateInstance()必须给予一个“封闭泛型类型”。

要做到这一点,你可以做类似下面的事情,但根据你的例子,我不认为这将是非常有用的,因为你需要创建大量的配置实例,你可能不知道要通过什么泛型中。

var t = type.MakeGenericType(typeof(SomeClassToBeUsedAsGenericTypeParameter)); 
dynamic configurationInstance = Activator.CreateInstance(t); 
... 

我的猜测是,typesTR中有更多类型比你期待的,包括基类是通用的一个。我认为它应该只包括DClass和EClass,但包含一个基类。

+0

先生我想使用EntityTypeConfiguration类的实体框架使用多级继承。上面的图片显示主要场景给我任何想法或任何解决方案 –

相关问题