Meine C # MVC-Website verwendet StructureMap zur Abhängigkeitsinjektion.
Der Konstruktor für meinen DbContext war wie folgt.
public class PortalEntityModel : DbContext
{
public PortalEntityModel() : base("name=PortalEntityModel")
{
}
}
Jetzt habe ich Effort.EF6 hinzugefügt, um den Komponententest durchzuführen, ich musste meinen DbContext-Konstruktor zu diesem ändern.
public class PortalEntityModel : DbContext
{
public PortalEntityModel(DbConnection connection) : base(connection, true)
{
}
}
Ich kann jetzt meinen Code testen. Ich kann die Website nicht mehr ausführen, da StructureMap seit der Änderung nicht mehr erstellt werden kann.
Keine Standardinstanz ist registriert und kann nicht automatisch für den Typ 'System.Data.Common.DbConnection' ermittelt werden
Wie kann ich StructureMap sagen, wie ich meinen DBContext wie zuvor initialisieren soll, während es Effort.EF6 auch erlaubt zu arbeiten?
Bearbeiten -
StructureMap wird gestartet, wenn die Website wie folgt gestartet wird ...
public static void Start()
{
IContainer container = IoC.Initialize();
StructureMapDependencyScope = new StructureMapDependencyScope(container);
DependencyResolver.SetResolver(StructureMapDependencyScope);
DynamicModuleUtility.RegisterModule(typeof(StructureMapScopeModule));
}
Es wird automatisch beim Start der Website gestartet
[assembly: PreApplicationStartMethod(typeof(StructuremapMvc), "Start")]
[assembly: ApplicationShutdownMethod(typeof(StructuremapMvc), "End")]
Ich habe es geschafft, es herauszufinden. Wenn der Konstruktor für die DBContext-Strukturkarte geändert wurde, konnte er keine DbConnection übergeben.
Also habe ich jetzt beide Konstruktoren und habe dem Strukturkarten-Setup ein bisschen Logik hinzugefügt, die ihm sagt, welchen Konstruktor die Webseite benutzen soll.
c.For (). Use (). SelectConstructor (() => new PortalEntityModel ());