Mi sitio web de C # MVC utiliza StructureMap para inyección de dependencia.
El constructor para mi DbContext solía ser el siguiente.
public class PortalEntityModel : DbContext
{
public PortalEntityModel() : base("name=PortalEntityModel")
{
}
}
Ahora he agregado Effort.EF6 para realizar una prueba de unidad, tuve que cambiar mi constructor DbContext a esto.
public class PortalEntityModel : DbContext
{
public PortalEntityModel(DbConnection connection) : base(connection, true)
{
}
}
Mientras que ahora puedo probar mi código de unidad. Ya no puedo ejecutar el sitio web porque StructureMap no puede crear desde el cambio.
Ninguna instancia predeterminada está registrada y no puede determinarse automáticamente para el tipo 'System.Data.Common.DbConnection'
¿Cómo puedo decirle a StructureMap cómo inicializar mi DBContext como antes, y permitir que Effort.EF6 también funcione?
EDITAR -
StructureMap se inicia cuando el sitio web se inicia de la siguiente manera ...
public static void Start()
{
IContainer container = IoC.Initialize();
StructureMapDependencyScope = new StructureMapDependencyScope(container);
DependencyResolver.SetResolver(StructureMapDependencyScope);
DynamicModuleUtility.RegisterModule(typeof(StructureMapScopeModule));
}
Se inicia automáticamente cuando se inicia el sitio web.
[assembly: PreApplicationStartMethod(typeof(StructuremapMvc), "Start")]
[assembly: ApplicationShutdownMethod(typeof(StructuremapMvc), "End")]
Me las arreglé para averiguarlo. Al cambiar el constructor para el mapa de estructura DBContext no se pudo pasar una DbConnection.
Así que ahora tengo ambos constructores y agregué un poco de lógica a la configuración del mapa de estructura que le indica qué constructor debe usar el sitio web.
c.For (). Use (). SelectConstructor (() => new PortalEntityModel ());