Erstellen von Entity-Framework-Objekte mit der Einheit für die Einheit der Arbeit/Repository pattern
Ich bin zu versuchen, die Einheit der Arbeit/Repository-Muster, wie hier beschrieben:
http://blogs.msdn.com/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx
Dies erfordert jedes Repository zu akzeptieren IUnitOfWork Umsetzung, z.B. ein EF-datacontext erweitert mit einer partiellen Klasse hinzufügen eine IUnitOfWork-Schnittstelle. Ich bin tatsächlich mit .net 3.5, nicht 4.0. Meine grundlegenden Daten Zugreifen Konstruktor sieht wie folgt aus:
public DataAccessLayer(IUnitOfWork unitOfWork,
IRealtimeRepository realTimeRepository)
{
this.unitOfWork = unitOfWork;
this.realTimeRepository = realTimeRepository;
}
So weit, So gut.
Was ich versuche zu tun, ist Dependency Injection mit dem Unity-Framework.
Immer die EF-Daten-Kontext erstellt werden, die Einheit war ein Abenteuer, wie es hatte Probleme bei der Auflösung der Konstruktor - was ich Tat, am Ende war es, erstellen Sie einen anderen Konstruktor in meinem partial-Klasse mit einem neuen überladenen Konstruktor, und gekennzeichnet, mit [InjectionConstructor]
.
[InjectionConstructor]
public communergyEntities(string connectionString, string containerName)
: this()
{
//...
}
(Ich weiß, ich muss übergeben Sie die Verbindungszeichenfolge für das Basis-Objekt, das kann warten, bis mal ich hab alle Objekte die Initialisierung korrekt)
So, mit dieser Technik, kann ich gerne lösen meine entity framework-Objekt als eine IUnitOfWork Beispiel so:
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<IUnitOfWork, communergyEntities>();
container.Configure<InjectedMembers>()
.ConfigureInjectionFor<communergyEntities>
(new InjectionConstructor("a", "b"))
DataAccessLayer target = container.Resolve<DataAccessLayer>();
//...
}
Toll. Was ich jetzt noch tun müssen, ist, erstellen Sie den Verweis auf das repository-Objekt für den DataAccessLayer - den DAL-nur kennen muss, um die Schnittstelle, so dass ich vermute, dass ich zu instanziieren, die es als Teil der Einheit Lösen-Anweisung, übergeben Sie die entsprechenden IUnitOfWork-Schnittstelle.
In der Vergangenheit, ich hätte nur bestanden das Repository Konstruktor die db-Verbindungszeichenfolge, und es wäre vorbei und Weg, erstellt eine lokale Entity Framework-Objekt und verwendet werden, die nur für die Lebensdauer des Repository-Methode. Dies ist anders, in der, ich erstellen Sie ein Entity-Framework-Instanz als IUnitOfWork Umsetzung in der Einheit Auflösen-Anweisung, und es ist die Instanz, die ich übergeben muss in den Konstruktor der Repository - ist das möglich, und wenn ja, wie?
Frage ich mich, ob ich könnte die Repository-eine Eigenschaft, und markieren Sie es als eine Abhängigkeit, aber das würde immer noch nicht das problem lösen, wie man erstellen Sie das Repository mit der IUnitOfWork-Objekt, das die DAL wird Gelöst mit
Ich bin mir nicht sicher, ob ich verstanden habe, dieses Muster richtig, und übernehmen gerne die Beratung über die beste Art, es zu realisieren - Entity Framework wird bleiben, aber die Einheit kann ausgetauscht werden, wenn nicht der beste Ansatz. Wenn ich hab die ganze Sache verkehrt herum, bitte sagen Sie mir,
InformationsquelleAutor TobyEvans | 2010-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese wurde umformuliert und hier beantwortet: Unity-framework - Wiederverwendung Instanz
Die Lösung ist die Verwendung eines ContainerControlledLifetimeManager - aka-Singleton:
http://msdn.microsoft.com/en-us/library/dd203242.aspx
IMHO, code ist king, besser mit gute code-Beispiel für die ausführlichere Erklärung. Referenzen:in der Kürze liegt akzeptabel, aber ausführlichere Erläuterungen sind besser jonskeet,
'Chuck Norris' of programming
Code ist König , links zu verwandten Ressourcen, scheuen Sie nicht löschen oder Bearbeiten Sie stark) nutzlose Antworten, nicht "beantworten und ausführen"es war ein sehr, sehr langer Zeit ... ich sollte mir vorstellen, dass der Rahmen tot und begraben war, auf einem Wikinger-Schiff und verbrannten auf einem See, vielen Monden damit
nun im Jahr 2017, in welchem Rahmen Ihre Projekte für den Datenzugriff?
Hadoop mit Scala und Funken nicht berührt haben C# in Jahren!
InformationsquelleAutor TobyEvans