Je suis en train d'utiliser l'unité pour injecter automatiquement un datacontext sur mon dépôt en utilisant une nouvelle instance à chaque fois .., mon idée est faire en sorte que chaque fois qu'un nouveau DataContext est injectéUNITY: transmettre un nouveau datacontext à chaque fois?
Actuellement son échec sur la création du référentiel, je pense qu'il ne peut pas résoudre MyDataContext
Avant de créer un constructeur sur « le référentiel » (voir ci-dessous) pour prendre en DataContext sur mon tout dépôt de travail mais maintenant son échec ..
J'ai actuellement cette configuration dans mon conteneur d'unité que je crée dans global.asax, j'ai aussi enregistré le type MyDataContext qui est standard DataContext
container = new UnityContainer();
Container.RegisterType<MyDataContext, MyDataContext>()
.RegisterType<IOfficeRepository, OfficeRepository>()
.RegisterType<IOfficeService, OfficeService>();
essentiellement j'ai un service qui appelle le dépôt comme si
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");
}
ici est mon dépôt
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db;
public OfficeRepository (MyDataContext dataContext)
{
this.db = dataContext;
}
EDIT
J'ai presque oublié que je suis en train de faire ce pour créer le service
officeService = Bootstrapper.Container.Resolve<IOfficeService>();
EDIT - L'ERREUR générée
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)
EDIT - ENLEVER Constructor sur référentiel fonctionne
Il est quelque chose à voir avec le datacontext parce que si je retire la constrcutor sur la référentiel qui prend un DataContext alors tout fonctionne, mais bien sûr j'en ai besoin pour accepter un DataContext pour pouvoir injecter un "nouveau" datacontext à chaque fois
public class OfficeRepository : IOfficeRepository
{
private MyDataContext db new MyDataContext(); // CHANGE
//public OfficeRepository (MyDataContext dataContext)
//{
//this.db = dataContext;
//}
EDIT - ERREUR RÉEL
Après avoir creusé plus profond que j'ai trouvé cette erreur ....
The type MyDataContext has multiple constructors of length 2.
Unable to disambiguate. (Strategy type DynamicMethodConstructorStrategy, index 0)
(Strategy type BuildPlanStrategy, index 3)
EDIT - TEST POUR RÉSOUDRE DataContext avec 1 ligne de code
Cela échoue également avec la même erreur que ci-dessus - plusieurs constructeurs
MyDataContext test = Bootstrapper.Container.Resolve<MyDataContext >();
EDIT - CONSTRUCTEURS SUR MON TOUS datacontext
Ils ont été créés par un exernal util mais tous devraient être 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();
}
EDIT - Pour démontrer la création du DataContext dans le code sans unité fonctionne 100% sans problème
MyDataContext tes2t = new MyDataContext();
Question mise à jour pour montrer comment je résous mon service en utilisant l'unité –
Que se passe-t-il si vous tentez de résoudre une instance de MyDataContext à différents endroits? Tout semble être en ordre, mais cela peut nous donner une idée. – GraemeF
De plus, y a-t-il une ligne ou une faute de frappe manquante dans le premier extrait de code? Il semble que 'container' et' Container' seraient des instances différentes. Vous pouvez vérifier que vous avez l'instance que vous attendez en utilisant le débogueur. – GraemeF