2017-04-18 1 views

Répondre

1

Je peux vous recommander de jeter un oeil à l'emballage Rebus.UnitOfWork car il fournit une API de niveau légèrement plus élevé pour la mise en œuvre d'une unité de mesure du travail - avec ou sans récipient. IoC

Avec Rebus.UnitOfWork vous pouvez le faire:

Configure.With(...) 
    .(...) 
    .Options(o => { 
     o.EnableUnitOfWork(Create, Commit, RollBack, Cleanup); 
    }) 
    .Start(); 

//.... 

static MyCustomUnitOfWork Create() => new MyCustomUnitOfWork(); 

static void Commit(MyCustomUnitOfWork uow) => uow.Commit(); 

static void RollBack(MyCustomUnitOfWork uow) => uow.RollBack(); 

static void Cleanup(MyCustomUnitOfWork uow) => uow.Dispose(); 

MyCustomUnitOfWork peut alors être tout ce que vous voulez, par exemple une classe qui crée un contexte de base de données EF et appelle SaveChanges et autres joyeusetés.

Vous pouvez en savoir plus sur the wiki page about Unit Of Work, ou aller directement au the sample that demonstrates Rebus.UnitOfWork avec le code de fonctionnement.

+0

Très clair merci. Le seul problème que j'ai actuellement est que mon contexte de base de données EF est déjà enregistré différemment (par exemple pas avec une méthode usine comme le fait l'exemple suggéré) et je ne sais pas comment utiliser un enregistrement différent pour le gestionnaire de messages en particulier. Toute suggestion? – Lorenzo

+1

Ma suggestion est toujours d'utiliser un conteneur IoC distinct pour chaque "application logique" que vous avez dans votre processus. Par exemple. Si vous hébergez une application Web et un backend basé sur Rebus, vous disposez de deux «applications logiques» distinctes. Vous devez donc disposer de deux conteneurs IoC. De cette façon, vous pouvez utiliser des styles de vie qui ciblent chaque scénario d'utilisation particulier (par exemple lié aux requêtes Web dans l'application Web, utiliser la méthode usine dans le backend Rebus) au lieu de le déformer pour le faire fonctionner dans les deux scénarios. – mookid8000

+0

Malheureusement dans mon cas cela ne peut pas être fait aussi facilement ... – Lorenzo