lundi 8 septembre 2014

C# / Autofac / Interface + Classe de base et "fonction de base" + Classes héritantes résolues pour appel de la "fonction de base".

Programme principal déclencheur du BusinessProcess, dont l'objectif est de d'enregistrer dans un ContainerBuilder Autofac, des classes héritantes d'une classe de base héritant elle-même d'une interface unique. Ensuite, objectif de résoudre les classes héritantes qui sont dans le container pour pouvoir appeler la méthode dans la classe de base (OUF!) :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;

namespace AutofacTest
{
    class Program
    {
        static void Main(string[] args)
        {
            ContainerBuilder builder = new ContainerBuilder();
            builder.RegisterType<BusinessProcessNormal>().SingleInstance();
            builder.RegisterType<BusinessProcessAdvanced>().SingleInstance();
            IContainer container = builder.Build();

            container.Resolve<BusinessProcessAdvanced>().WaitForHumanDecision();
            container.Resolve<BusinessProcessNormal>().WaitForHumanDecision();

            Console.WriteLine("Fin du BusinessProcess.");
            Console.ReadLine();
        }
    }
}


Interface de laquelle hérite uniquement la classe de base :

using System;
namespace AutofacTest
{
    interface IBusinessProcess
    {
        void Buy();
        void Sell();
    }
}


Classe de base héritant de l'interface IBusinessProcess et comportant entre autres la méthode WaitForHumanDecision, puis ensuite déclaration de deux classes héritantes de la classe de base :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autofac;

namespace AutofacTest
{
    public class BusinessProcessBase : IBusinessProcess
    {
        public virtual void Sell()
        {
            Console.WriteLine("Default Selling.");
        }

        public virtual void Buy()
        {
            Console.WriteLine("Default Buying.");
        }

        public void WaitForHumanDecision()
        {
            Console.WriteLine("Waiting for human decision.");
        }
    }

    public class BusinessProcessAdvanced : BusinessProcessBase
    {
        public override void Sell()
        {
            Console.WriteLine("Advanced Selling.");
        }

        public override void Buy()
        {
            Console.WriteLine("Advanced Buying.");
        }
    }

    public class BusinessProcessNormal : BusinessProcessBase
    {
        public override void Sell()
        {
            Console.WriteLine("Normal Selling.");
        }
      
        public override void Buy()
        {
            Console.WriteLine("Normal Buying.");          
        }
    }
}