2017-10-28 6 views
-1

enter image description hereKann keine Instanz erstellt werden, weil Type.ContainsGenericParameters wahr ist

ich eine Instanz dynamisch Reflexion mit erschaffe.

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

und meine Ausnahme ist folgende: - "Es kann keine Instanz von CGenericConfigurationClass`1 [T] erstellt werden, weil Type.ContainsGenericParameters wahr ist."

+0

Das Bild ist überhaupt nicht hilfreich. Bitte entfernen Sie es und zeigen Sie stattdessen Code an. Beachten Sie außerdem, dass EF über eine integrierte Funktion zum Ermitteln von "EntityTypeConfiguration" -Klassen in einer Assembly verfügt. –

+0

stellen Sie Ihre Live-E-Mail zur Verfügung, um den genauen Code zu erhalten. –

+0

Ich möchte mehrstufige Vererbung mit der EntityTypeConfiguration-Klasse von ef verwenden. Gib mir eine Idee oder irgendeine Lösung. –

Antwort

1

Es scheint, als ob einer der Typen in typesTR ein generischer Typ ist und Sie versuchen, eine Instanz dieses Typs ohne Angabe der generischen Typparameter zu erstellen. Dies ist beispielsweise so, als ob Sie versucht hätten, eine Instanz von List<> zu erstellen, ohne jedoch den Typ zwischen den spitzen Klammern <> anzugeben. Dies ist nicht möglich, Activator.CreateInstance() muss einen "geschlossenen generischen Typ" erhalten.

Um dies zu tun, könnten Sie so etwas wie die folgenden tun, sondern basierend auf dem Beispiel, ich glaube nicht, das sehr nützlich sein wird, da Sie zahlreiche Konfigurationsinstanzen erstellen müssen und Sie können nicht wissen, was generischer Typ passieren in.

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

Meine Vermutung ist, dass typesTR mehr Arten in ihm hat, als Sie erwartet haben und enthält eine der Basisklassen, die generisch ist. Ich denke, es sollte nur DClass und EClass enthalten, enthält aber eine der Basisklassen.

+0

Sir ich möchte mehrstufige Vererbung mit EntityTypeConfiguration-Klasse von Entity Framework verwenden. Das obige Bild zeigt das Hauptszenario Gib mir eine Idee oder irgendeine Lösung –

Verwandte Themen