Einheit von Arbeit und das repository-pattern

Ich habe eine repository-pattern-setup mit NHibernate. Die Basis-Klasse sieht wie folgt aus:

public interface IUnitOfWork : IDisposable
{
    void Commit();
    void Rollback();
}

//generic NHibernate implementation of IUnitOfWork here

public class NHibernateRepositoryBase<T> : IRepository<T>
{
    private NHibernateUnitOfWork _unitOfWork;

    public NHibernateRepositoryBase(NHibernateUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }
    public T Get(object id)
    {
        return _unitOfWork.Session.Get<T>(id);
    }

    //...
}

Wie Sie sehen können, ich bin so dass die Einheit der Arbeit aufgefüllt werden über den Konstruktor (mit StructureMap). Ich bin das Auffüllen der repository-Objekte auf meine ASP.NET web services etwa so:

[WebService(Namespace = "...")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ModuleService : System.Web.Services.WebService
{
    public IUserAccountRepository UserAccountRepo { get; set; }

    public ModuleService()
    {
        //tell IoC to inject properties
        ObjectFactory.BuildUp(this);
    }

    //...
}

Wie Sie vielleicht in der Lage sein zu folgern, mein problem ist, dass durch die Art des design, ich habe jetzt verlor die Kontrolle über den Lebenszyklus der Einheit arbeiten. Bisher habe ich die Einheit der Arbeit ein Kontext-sensitives Objekt und das repository würde, um eine Referenz auf es über so etwas wie:

public class NHibernateRepositoryBase<T> : IRepository<T>
{
    public T Get(object id)
    {
        return NHibernateUnitOfWork.GetCurrent().Session.Get<T>(id);
    }

    //...
}

Diese Vorherige design mir erlaubt, Steuerung des Lebenszyklus der Einheit von Arbeit in meinem code durch die Schaffung der Einheit von Werk aus UnitOfWorkFactory innerhalb einer using-Anweisung. Ich versuchte, mehr von der Arbeit in die Hände der IoC-container, aber ich denke, ich habe eigentlich ein Rückschritt. Was sind Ihre Gedanken auf, die entweder die Umsetzung?

InformationsquelleAutor Chris | 2010-01-15
Schreibe einen Kommentar