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

Schreibe einen Kommentar