estoy tratando de utilizar la unidad para inyectar automáticamente una DataContext en mi repositorio usando una nueva instancia cada vez .., mi idea es el asegurar que cada vez que un nuevo DataContext se inyectaUNIDAD: ¿se pasa un nuevo contexto de datos cada vez?
Actualmente su defecto en la creación del repositorio, creo que no puede resolver MyDataContext
Antes de crear un constructor en "el repositorio" (véase más adelante) para tomar en el DataContext en mi repositorio todo funcionaba pero ahora su defecto ..
Actualmente tengo esta configuración en mi contenedor de unidad que creo en global.asax, también he registrado el tipo MyDataContext que es DataContext estándar
container = new UnityContainer();
Container.RegisterType<MyDataContext, MyDataContext>()
.RegisterType<IOfficeRepository, OfficeRepository>()
.RegisterType<IOfficeService, OfficeService>();
básicamente tengo un servicio que llama al repositorio al igual que
public class OfficeService : IOfficeService
{
IOfficeRepository repository = null;
public OfficeService(IOfficeRepository repository)
{
this.repository = repository;
if (this.repository == null)
throw new InvalidOperationException("Repository cannot be null");
}
aquí está mi repositorio
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db;
public OfficeRepository (MyDataContext dataContext)
{
this.db = dataContext;
}
EDITAR
casi me olvido que estoy haciendo esto para crear el servicio
officeService = Bootstrapper.Container.Resolve<IOfficeService>();
EDITAR - EL ERROR está generando
Resolution of the dependency failed, type = "MarkSmith.IOfficeService", name = "".
Exception message is: The current build operation (build key Build
Key[MarkSmith.OfficeService, null]) failed: The parameter repository could not be
resolved when attempting to call constructor
MarkSmith.OfficeService(MarkSmith.IOfficeRepository repository). (Strategy type BuildPlanStrategy, index 3)
EDITAR - EXTRACCIÓN Constructor en el repositorio de obras
Es algo que ver con el DataContext porque si quito el constrcutor en el repositorio que toma un DataContext luego todo funciona, pero por supuesto necesito que acepte un DataContext para poder inyectar un "nuevo" contexto de datos cada vez
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db new MyDataContext(); // CHANGE
//public OfficeRepository (MyDataContext dataContext)
//{
//this.db = dataContext;
//}
EDITAR - error real
Después de cavar más profundo que he encontrado este error ....
The type MyDataContext has multiple constructors of length 2.
Unable to disambiguate. (Strategy type DynamicMethodConstructorStrategy, index 0)
(Strategy type BuildPlanStrategy, index 3)
EDITAR - TEST PARA RESOLVER EL DataContext con 1 línea de código
Esto también falla con el mismo error que el anterior - múltiples constructores
MyDataContext test = Bootstrapper.Container.Resolve<MyDataContext >();
EDITAR - todos los constructores EN MI DataContext
estos fueron creados por un util exernal pero todos deben estar bien ..
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext()
: base(ConnectionString, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(string connection)
: base(connection, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(System.Data.IDbConnection connection)
: base(connection, mappingCache)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource)
: base(connection, mappingSource)
{
OnCreated();
}
[System.Diagnostics.DebuggerNonUserCode]
public MyDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource)
: base(connection, mappingSource)
{
OnCreated();
}
EDITAR - Para demostrar la creación de la DataContext en el código sin la unidad funciona al 100% sin ningún problema
MyDataContext tes2t = new MyDataContext();
Pregunta actualizada para mostrar cómo estoy resolviendo mi servicio usando la unidad –
¿Qué sucede si intentas resolver una instancia de MyDataContext usando en varios puntos? Todo parece estar en orden, pero eso puede darnos una pista. – GraemeF
Además, ¿falta una línea o un error ortográfico en el primer extracto del código? Parece que 'container' y' Container' serían instancias diferentes. Puede verificar que tiene la instancia que espera utilizando el depurador. – GraemeF