J'ai récemment créé une bibliothèque de service WCF. Je prévois de l'héberger dans IIS. Puisque je veux réutiliser ma couche de dépôt, j'ai décidé d'utiliser aussi Ninject dans mon service WCF (je l'utilise dans d'autres projets de la solution).Liaisons Ninject Di utilisant un service WCF
J'ai installé les extensions Wcf Ninject. Je l'ai configuré en utilisant NinjectServiceHostFactory dans le fichier svc. J'ai ajouté un fichier Global.asax pour remplacer le CreateKernel() qui hérite de NinjectWcfApplication mais je ne suis pas sûr si j'utilise les liens correctement. J'ai d'abord commencé avec:
Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
Mais je me suis rapidement rendu compte que cela ne fonctionnait pas puisque aucune donnée n'était enregistrée dans ma base de données. Il semble que le service WCF n'utilise pas le pipeline ASP.NET. Je suis allé de l'avant et a essayé ces deux aussi bien juste pour voir si mes données a été commis à la base de données:
Bind<IUnitOfWork>().To<UnitOfWork>().InThreadScope();
Bind<IUnitOfWork>().To<UnitOfWork>().InTransientScope();
Pas de chance. Je me suis alors décidé d'essayer:
Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
Cela a fonctionné, mais je ne veux pas que mon contexte de base de données à partager par toutes les demandes qui vient au service WCF. J'ai ensuite fait quelques recherches et trouvé l'approche suivante:
Bind<IUnitOfWork>().To<UnitOfWork>().InScope(c => OperationContext.Current);
Cela fonctionne mais est-ce correct? Je voulais quelque chose ressemblant à InRequestScope pour une application MVC. Chaque requête au service doit avoir son propre contexte de base de données.
Merci Remo, je vais jeter un coup d'oeil. Mais supposons que je veux juste utiliser Ninject et Ninject.Extensions.Wcf, OperationContext.Current serait quelque chose que vous suggérez d'utiliser comme portée. Surtout si je veux déplacer le service WCF vers un hôte non IIS sur la ligne. – Thomas
Vous avez probablement mal compris. Vous devrez le faire de toute façon si vous voulez utiliser la dernière version de Ninject. Web.cmmon est une dépendance requise pour l'extension wcf même si elle est auto-hébergée. –