J'ai obtenu des classes statiques avec des méthodes d'extension qui ajoutent la «logique métier» aux entités utilisant le modèle de référentiel.Comment injecter ninject lui-même dans une classe statique avec des fonctions d'extension
Maintenant, j'ai parfois besoin de créer un nouveau IRepository
dans ces fonctions d'extension.
Je travaille actuellement autour en accédant à mon noyau Ninject à travers l'objet que je suis d'extension, mais il est vraiment moche:
public static IEnumerable<ISomething> GetSomethings(this IEntity entity)
{
using (var dataContext = entity.kernel.Get<IDataContext>())
return dataContext.Repository<ISomething>().ToList();
}
Je pourrais aussi faire un constructeur statique, l'accès au noyau Ninject en quelque sorte de une usine, y a-t-il déjà une infrastructure pour cela dans Ninject 2?
Est-ce que quelqu'un connaît une meilleure solution? Quelqu'un a-t-il des commentaires sur cette façon de mettre en œuvre la logique métier?
Merci pour votre réponse. Je ne suis pas très friand de l'emplacement de service non plus, à mon avis c'est encore plus laide ce que je fais maintenant. Je vais aller avec le plus gros problème ici, que ce n'est pas le bon endroit pour ajouter une logique métier. J'espérais qu'il y avait un moyen magique d'injecter un constructeur statique. Donc, je pourrais garder mon design et ne pas le rendre trop moche. Je vais laisser la question ouverte pendant encore quelques heures et si aucun génie AOP ne se présente, j'accepterai votre réponse! – JJoos
Vous ne trouverez pas de génies ici - juste des gens qui traquent des réponses sur les forums - ils sont tous sur la liste de diffusion Ninjecxt: D Bottomlin est pour les méthodes statiques [comme les méthodes d'extension], qu'il n'y a pas de contexte ou d'opportunité intercepter de toute manière facile. Il est possible de faire circuler le contexte dans l'Entité au moment de «nouveau» de diverses manières (NHibernate et L2S ont chacun leurs propres moyens). Le problème est que vous ne voulez pas que les entités prennent les choses en main et courent dans d'autres dépôts. Et l'efficacité en souffrira également - à moins que vous ne suiviez une route semblable à Hiro. –
Le livre Evans DDD (un incontournable à lire absolument, peu importe ce que vous faites, même si cela vous fait mal la tête pour l'absorber) et/ou http://thinkddd.com/ vous aidera à réfléchir à votre conception globale ici .Si vous cherchez vraiment des trucs AOP lourds, vous trouverez cela dans le sens de PostSharp. –