NopCommerce - Injection de dépendances depuis une application console
Dans le cadre d'un projet lié à l'affiliation, j'ai du accéder au repository NopCommerce depuis une application console en C#. Un plugin a été développé pour l'administration des imports. Et un batch va insérer et traiter des données dans les nouvelles tables.
1 - Ajouter un projet de type console application au projet
Attention au "target framework" (en ce moment c'est le 4.5.1)
2 - Ajouter les référence à entity framework
(nuget ou manuel -> EntityFramework.dll + EntityFramework.SqlServer.dll)
Si ce n'est pas déjà fait, modifier le fichier app.config de cet façon:
<configSections> <section name="NopConfig" type="Nop.Core.Configuration.NopConfig, Nop.Core" requirePermission="false" /> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <NopConfig> <DynamicDiscovery Enabled="true" /> <Engine Type="" /> <Themes basePath="~/Themes/" /> <UserAgentStrings databasePath="~/App_Data/uas_*****.ini" /> </NopConfig> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
3 - Ajouter les références NopCommerce
Autofac, Nop.Core, Nop.Data, Nop.Web.Framework, paquet MVC)
4 - Ajouter les fichiers de configuration
Créer un dossier App_Data
Clique droit sur le dossier, ajouter élément existant, sélectionner le dossier Presentation/Nop.Web/App_Data, voir tous les fichiers, puis ajouter en tant que lien les 2 fichiers Settings.txt et uas_xxxx.ini
Une fois ces fichiers ajouter à la solution, sélectionnez-les puis dans les propriétés, choisir "Copy to output directory": Copy if never
5 - Configurer l'injection de dépendances
Exemple dans le main de la classe program.cs
var myService = Nop.Core.Infrastructure.EngineContext.Current.Resolve<IMyService>(); var result = myService.MyMethod();
6 - Enjoy !
N'hésitez pas à ajouter des commentaires si vous avez la moindre question ;)