Je suis un peu confus sur la façon dont cela fonctionnerait avec Unity. Supposons le scénario suivant, j'ai un contrôleur appelé TestController qui dépend de deux Services ServiceA et ServiceB. Maintenant, serviceA dépend de deux référentiels, RepositoryA1 et RepositoryA2. ServiceB dépend d'un référentiel, RepositoryB. Supposons en outre que ServiceA, RepositoryA1 et RepositoryA2 dépendent de UnitOfWork, UnitOfWork1. J'ai du mal à comprendre comment implémenter ceci pour MVC3 et le bloc d'application Unity. Quelqu'un pourrait-il donner un exemple de la façon dont cela devrait être codé?Comment injecter la couche de service dans le contrôleur lorsque la couche de service dépend du référentiel et UnitOfWork
3
A
Répondre
4
Il y a un avis de beaucoup sur cela, mais c'est la façon dont je travaille dehors pour moi
UnitOfWork
public interface IUnitOfWork : IDisposable
{
FooContext DbContext { get; }
void Save();
}
public class UnitOfWork : IUnitOfWork
{
protected string ConnectionString;
private FooContext context;
public UnitOfWork(string connectionString)
{
this.ConnectionString = connectionString;
}
public FooContext DbContext
{
get
{
if (context == null)
{
context = new FooContext(ConnectionString);
}
return context;
}
}
...
}
GenericRepository
public class GenericRepository<TEntity> :
IGenericRepository<TEntity> where TEntity : class
{
protected FooContext DbContext;
public GenericRepository(IUnitOfWork unitOfWork)
{
this.DbContext = unitOfWork.DbContext;
}
...
}
dépôts génériques ici, mais ils pourraient tout aussi bien être construit pour être précis.
service
public class FooService : IFooService
{
private IUnitOfWork unitOfWork;
private IGenericRepository<Foo> fooRepository;
private IGenericRepository<Bar> barRepository;
public FooService(IUnitOfWork unitOfWork,
IGenericRepository<Foo> fooRepository,
IGenericRepository<Bar> barRepository)
{
this.unitOfWork = unitOfWork;
this.fooRepository = fooRepository;
this.barRepository = barRepository;
}
}
Vous devez toujours passer le IUnitOfWork pour avoir accès à la méthode Save
. Je suppose que j'aurais pu l'obtenir de l'un des dépôts.
UnityConfig
var container = new UnityContainer();
container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager(),
new InjectionConstructor(ConnectionString));
container.RegisterType(typeof(IGenericRepository<>), typeof(GenericRepository<>));
container.RegisterType<IFooService, FooService>();
container.RegisterType<IBarService, BarService>();
Contrôleur
private IFooService fooService;
private IBarSevice barService;
public HomeController(IFooService fooService, IBarService barService)
{
this.fooService = fooService;
this.barService = barService;
}
Questions connexes
- 1. Couche de service = Couche application = Couche contrôleur GRASP
- 2. UOW et dépôt + service couche
- 3. Conception de couche métier/service n-couche
- 4. Gestion des transactions dans la couche de service ou la couche de référentiel?
- 5. Couche domaine + couche du référentiel avec la question mvc asp.net
- 6. Où placer la couche de service
- 7. Couche de service pouvant basculer entre la couche de service Web et la couche d'accès aux données
- 8. Modèles et pratiques. Couche de service?
- 9. Conseils Avec référentiel/service Design Pattern couche
- 10. Couche WCF/Service Layer/Repository: retour du DTO de la couche Service? Et créer ViewModel dans le contrôleur de la DTO retourné
- 11. Injecter la propriété ASP.NET MVC Controller dans la dépendance de la couche de service?
- 12. Couche de service MVVM
- 13. Couche de service répète mes dépôts
- 14. Couche de service et contrôleur: qui prend soin de quoi?
- 15. Comment gérer enum lors du transfert de la couche de service à la couche de gestion?
- 16. Modèle de couche de service - Pourrions-nous éviter la couche de service dans un cas spécifique?
- 17. Comment gérer les transactions dans la couche de service?
- 18. Windsor Castle IoC: Comment Initialiser Service et couche référentiel
- 19. Vérifier les conditions préalables dans la couche Contrôleur ou Service
- 20. Modèle de référentiel ASP.NET/cache de couche de service
- 21. Architecture de l'oignon - Responsabilité de la couche de service
- 22. Entity Framework - Quel est le rôle de la couche Service dans le modèle de référentiel
- 23. Conception de la couche de service DTO et DO
- 24. asp.net couche de service et mvc unité de travail
- 25. Authentification personnalisée avec la couche de service?
- 26. Comment gérer la validation de la couche service dans MVC3
- 27. Play2 Comment gérer la transaction de la couche de service au lieu de la couche d'action?
- 28. interfaces du référentiel de câblage dans la couche de service dynamique
- 29. Couche de service et objets auxiliaires?
- 30. RequestFactory avec la couche de service
Donc cela va injecter automatiquement le UnitOfWork dans le service et les dépôts? – user1790300
@ user1790300 Oui, car chaque dépendance de la chaîne est enregistrée – Jasen
Il serait pratique de faire des dépôts en tant que propriétés (avec chargement paresseux) de l'unité de travail. Donc, vous devez passer au service d'une unité de travail sans longue liste de référentiels. – eternity