Est-il bon d'avoir une méthode d'usine pour récupérer des objets injectés ou est-ce OK pour simplement utiliser la méthode de fabrication du cadre de DI? J'utilise map de structure, devrais-je simplement utiliser ObjectFactory.GetInstance() ;, ou devrais-je créer une classe de fabrique et dans cette classe appel ObjectFactory.GetInstance() ;? parce que si j'appelle ObjectFactory.GetInstance(); dans mes cours, je créerais un couplage avec le cadre DI? désolé si je suis ignorant, je suis nouveau à ces concepts. Merci!Utiliser l'usine pour obtenir des objets Injecté
Répondre
Si vous utilisez déjà un cadre de DI pourquoi re-mettre en œuvre le modèle d'usine quand il est déjà fourni par le cadre? De même, vous ne devez pas créer de dépendance avec le cadre DI dans les couches de gestion de l'application. Là, vous devriez faire abstraction avec des interfaces et des classes abstraites. La structure DI doit uniquement être utilisée au niveau le plus élevé, par exemple dans l'interface graphique pour effectuer la plomberie des couches inférieures et sélectionner par exemple une couche d'accès aux données appropriée.
Une méthode d'usine est utile lorsque vous avez besoin d'un contrôle précis sur lorsque vous avez besoin de l'instance. Cependant, vous ne devez pas dépendre directement du conteneur mais injecter une méthode factory en tant que dépendance. Voici un exemple illustrant ceci:
public class SomeController
{
private Func<ISomeService> _serviceFactory;
public SomeController(Func<ISomeService> serviceFactory)
{
_serviceFactory = serviceFactory;
}
public void DoSomeWork()
{
var service = _serviceFactory();
....
}
}
Le code d'enregistrement StructureMap ressemblerait à quelque chose comme ceci:
var container = new Container(cfg =>
cfg.For<ISomeService>().Use(() => new SomeServiceImpl())
);
- 1. Objets JSON imbriqués - dois-je utiliser des tableaux pour tout?
- 2. Quel algorithme utiliser pour obtenir des objets à partir d'une image
- 3. Collection 'correcte' à utiliser pour obtenir des objets en O (1) en C# .NET?
- 4. obtenir Params dans le contrôleur injecté Zend Framework
- 5. Utiliser Hpricot pour obtenir des éléments enfants
- 6. Comment utiliser XPath pour obtenir des éléments?
- 7. Comment utiliser NSPredicate pour capturer des objets enfants?
- 8. Utiliser le fichier comme des objets pour Tk(). Iconbitmap()
- 9. Comment utiliser LINQ-to-Entity pour interroger des objets contenus
- 10. Utiliser des objets personnalisés comme source pour Microsoft Reports (.rdlc)
- 11. Comment utiliser REF pour référencer des objets de ligne?
- 12. Obtenir des objets pour rester dans une droppable scriptaculous
- 13. Décode du Javascript injecté?
- 14. NHibernate Obtenir des objets sans proxy
- 15. Fonction pour créer des objets?
- 16. Obtenir des objets JSON individuels avec Ruby
- 17. Comment obtenir une liste des objets Prolog
- 18. Comment utiliser Lucene pour obtenir des tags pour tagcloud?
- 19. Conception pour convertir des objets
- 20. Puis-je utiliser des objets MFC dans des conteneurs STL?
- 21. Pouvez-vous utiliser des objets Future/Futuretask avec Spring TaskExecutors?
- 22. Comment utiliser des objets avec des types xsi: dans Savon
- 23. Liens en float injecté div
- 24. filtre Spring Framework, haricot pas injecté
- 25. Comment configurer Automapper pour qu'il soit injecté avec Ninject 2.0?
- 26. Dictionnaire Python pour stocker des objets socket
- 27. Obtenir la liste Activerecord des objets associés à partir de la liste des objets
- 28. Les données dynamiques ASP.NET peuvent-elles être utilisées pour utiliser des objets métier personnalisés plutôt que des objets de données?
- 29. hql obtenir des objets où la propriété des objets est "sous-chaîne" de la valeur d'entrée
- 30. Accéder à l'objet contenant un objet injecté?
Je suis d'accord avec Darin, laissez le cadre de DI faire son travail au lieu de dupliquer les fonctionnalités. –