NopCommerce - Injection de dépendances depuis une application console

 25/09/2019 |   Admin |  NopCommerce


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 ;)