Ich habe benutzerdefinierte DbContext, die von IdentityDbContext erbt. Klasse sieht wie folgt aus:Erstellen von DbContext mit Unity fehlgeschlagen mit zusätzlichen ctr
public class ReaderContext : IdentityDbContext<IdentityUser>
{
//DbSets
public ReaderContext()
: base("name=ReaderDb")
{
System.Data.Entity.Database.SetInitializer<ReaderContext>(null);
Database.Initialize(true);
}
}
Und wenn DbContext wie folgt aussieht, Code Erstellen von Repository (die ReaderContext verwendet) funktioniert: (! Nicht vorhandene zu entfernen)
container.RegisterType<IRepository, CustomRepository>(new HierarchicalLifetimeManager());
var repo = container.Resolve<IRepository>();
Wenn ich einen anderen Konstruktor hinzufügen In ReaderContext funktioniert das Erstellen von CustomRepository nicht mehr in UnityContainer.
Ich muss es auf diese Weise haben, damit ich Kontext mit Aufwand moq kann. Ich verwende den Unity-Container. Ausnahme Ich habe:
2017-08-07 19: 02: 57,9256: Ausnahme: Microsoft.Practices.Unity.ResolutionFailedException: Auflösung der Abhängigkeit fehlgeschlagen ist, type = „DataAccess.Database.Repositores .IRepository ", name = " (keine) ". Ausnahme aufgetreten während: während der Auflösung. Ausnahme ist: InvalidOperationException - Der aktuelle Typ System.Data.Common.DbConnection ist eine abstrakte Klasse und kann nicht konstruiert werden. Vermissen Sie ein Typ-Mapping? ----------------------------------------------- Bei der Zeit der Ausnahme, war der Behälter:
Resolving DataAccess.Database.Repositores.CustomRepository, (none) (gemappt von DataAccess.Database.Repositores.IRepository, (none))
Auflösen Parameter "Kontext" der Konstruktor DataAccess.Database.Repositores.CustomRepository (DataAccess.Database.ReaderContext context) Resolving DataAccess.Database.ReaderContext, (none) Auflösen Parameter "Verbindung" des Konstruktors DataAccess.Database.ReaderContext (System.Data.Common. DbConnection Verbindung) Resolving System.Data.Common.DbConnection, (keine) ---> System.InvalidOperationException: Der aktuelle Typ, System.Data.Common.DbConnection, ist eine abstrakte Klasse und kann nicht konstruiert werden. Vermissen Sie ein Typ-Mapping?
Warum das Hinzufügen neuer Konstruktoren die Einheitskonfiguration unterbrechen? Außerdem habe ich versucht, die Einheit von Grund auf neu zu gestalten, aber ich konnte es nicht funktionieren lassen. Wahrscheinlich weiß ich nicht, wie Einheit funktioniert, also sind alle Tipps willkommen :)
Schade, ich kann nicht mehr, große Antwort. "Standardmäßig wählt Unity den Konstruktor mit der größten Anzahl an Parametern aus." Danke vielmals –