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" />

 
...

Lire >>

Pierre-Henri - L'appli windows phone

 25/09/2019 |   Admin |  Windows phone


L'application Pierre-Henri pour windows phone vient de voir le jour. Le but de développer cette application était avant tout pour le fun et aussi pour tester les possibilités du CMS Orchard.

J'ai donc développé une API "Orchard.PhApi" (qui sera prochainement disponible sous forme de plugin). Cette API permet de requêter Orchard afin d'obtenir le contenu dont j'avais besoin pour l'application mobile, à savoir, le contenu des pages et du blog.

L'application est disponible via cette url : http://windowsphone.com/s?appid=91f66219-d58b-40cc-a547-a3028214d984

L'application affiche le menu et le contenu dynamiquement en fonction de l'API Orchard. Cette application mobile pourra donc être connectée à n'importe quel site Orchard, c'est pour cette raison que j'essairai d'en faire un projet open source, soit windows universal app, ou alors un projet Xamarin.

Un post plus détaillé mettera en avant les technos utilisées pour réaliser au mieux cette appli.

Lire >>

Windows phone 10 - Afficher un popup de confirmation avant de fermer l'application

 25/09/2019 |   Admin |  Windows phone


Dans une application universelle, pour la famille Windows Phone, l'appui sur le bouton Back entraine un retour sur la page précédente. Si cette dernière est la première page de l'application, l'application va se fermer.

Ce fonctionnement est logique mais un utilisateur peut utiliser cette fonction intentionnellement. C'est pour cela que l'ajout d'un popup de confirmation peut-être utile dans certains cas.

Dans la méthode OnLaunched de la classe App (App.xaml.cs)

Dans un premier temps, il faut tester si le device est un téléphone et si le bouton back est présent :

if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
    HardwareButtons.BackPressed += OnBackPressed;
}

Ensuite, déclarer une méthode privée au sein de cette même classe :

private async void OnBackPressed(object sender, BackPressedEventArgs e)
{
    var frame = (Frame)Window.Current.Content;
    e.Handled = true;

    if (frame.CanGoBack)
    {        
        frame.GoBack();
    }
    else
    {
        var msg = new MessageDialog("Etes-vous sûr de vouloir quitter l'application ?");
        var okBtn = new UICommand("Oui");
        var cancelBtn = new UICommand("Non");
        msg.Commands.Add(okBtn);
        msg.Commands.Add(cancelBtn);
        IUICommand result = await msg.ShowAsync();
 
       if (result != null && result.Label == "Oui")
       {
            Application.Current.Exit();
       }
    }
}

[Capture]

Lire >>

Obtenir mon adresse ip public en c#

 24/09/2019 |   Admin |  C#


La meilleure facon d'obtenir son adresse ip public c'est de le demander a quelqu'un d'autre

Voici le code qui va donner votre adresse ip public

public string GetPublicIP()
{
string result = string.Empty;
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
using (WebResponse response = request.GetResponse())
using (StreamReader stream = newStreamReader(response.GetResponseStream()))
{
result = stream.ReadToEnd();
}
 //Search for the ip in the html
int first = result.IndexOf("Address: ") + 9;
int last = result.LastIndexOf("</body>");
result = result.Substring(first, last - first);
  
return result;
}

Lire >>

Exemples d'utilisation des expressions régulières en c#

 23/09/2019 |   Admin |  C#

Tags: regex

Dans ce post j'ajouterais de temps en temps les exemples d'expressions régulières que j'utilise

Récupérer les valeurs d'un tag html href

Ici, on va récupérer les valeurs des href seulement si la chaine de caractere contient .xls ou.pdf et si le lien se termine bien par .xls ou .pdf

string[] extensions = { ".xls", ".pdf" };
if (extensions.Any(e=>htmlContent.Contains(htmlContent)))
{
Match m;
string HRefPattern = "href\\s*=\\s*(?:[\"'](?<1>[^\"']*)[\"']|(?<1>\\S+))";
m = Regex.Match(htmlContent, HRefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
  
while (m.Success)
{
if (extensions.Any(e => m.Groups[1].ToString().EndsWith(e)))
{
theValue =  m.Groups[1] ;
}
 m = m.NextMatch();
}
}

Lire >>

Exemples d'utilisation de la réflexion en c#

 22/09/2019 |   Admin |  C#


A - Obtenir les valeurs des propriétés d'une classe (avec un type inconnu)

Dans cet exemple nous allons etre capable de lire les valeurs d'une propriété passée en parametre. Dans une liste de type inconnu.

public static void GetProperties<T>(List<T> result, string property)
 
{
 
foreach (var item in result)
 
{
 
PropertyInfo[] properties = item.GetType().GetProperties();
 
var propInfoObj = properties.Where(p => p.Name.ToLower() == property.ToLower()).FirstOrDefault();
 
object propValue = item.GetType().InvokeMember(propInfoObj.Name, BindingFlags.GetProperty, null, item, null);
 
}
 
}

B - Remplir une DropDownList avec les propriétés d'une classe de type static

FieldInfo[] properties = typeof(VotreClasse).GetFields();
 
var flds = properties.Where(p => p.IsStatic);
 
foreach (var item in flds)
 
{
 
ddlType.Items.Add(new ListItem() { Text = item.Name, Value = item.GetValue(null).ToString() });
 
}

Pour toute question laisser un commentaire

Lire >>

Comparer 2 objets en .Net avec la réfléxion

 01/01/2019 |   Admin |  C#


Dans cet article nous allons voir comment comparer les propriétés de 2 objets en c# en utilisant la réflexion.

Nous allons utiliser le package KellermanSoftware.CompareNetObjects pour cela.

Et comparer deux objets de type "Person" avec une "Adresse" pour utiliser la comparaison des propriétés "enfant"

Classe Person et Address:
namespace PocCompareReflection
{
    public class Person
    {
        public string Name { get; set; }
  
        public DateTime DateCreated { get; set; }
  
        public int Age { get; set; }
  
        public Address Address { get; set; }
    }
  
    public class Address
    {
        public string City { get; set; }
  
        public List<string> Phones { get; set; }
    }
}
Et une application console pour éxécuter la comparaison:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KellermanSoftware.CompareNetObjects;
  
namespace PocCompareReflection
{
    class Program
    {
        static void Main(string[] args)
        {
            CompareObjects compareObjects = new CompareObjects();
 // Objet 1
            Person person1 = new Person();
            person1.DateCreated = DateTime.Now;
            person1.Age = 29;
            person1.Name = "Jean";
          
...

Lire >>

Vider le cache d'une application .Net en recyclant le pool d'application (Flush cache)

 01/01/2019 |   Admin |  C#


Méthode un peu violente mais efficace si besoin de redémarrer le pool d'application

HttpRuntime.UnloadAppDomain();

Lien msdn: http://msdn.microsoft.com/fr-fr/library/system.web.httpruntime.unloadappdomain(v=vs.110).aspx

Lire >>