using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using Castle.MicroKernel.Registration;
using Castle.Windsor;

namespace CastelWindsorConstructeur
{
    public interface IActeur0 {
        int MonObjetID { get; set; }
        string MonObjetPersonneNon { get; set; }
        string MonObjetPersonnePrenom { get; set; }
    }
    public interface IActeur1
    {
        int MonObjetID { get; set; }
        string MonObjetPersonneNon { get; set; }
        string MonObjetPersonnePrenom { get; set; }
    }
    public class Acteur0 : IActeur0
    {
        public int MonObjetID { get; set; }
        public string MonObjetPersonneNon { get; set; }
        public string MonObjetPersonnePrenom { get; set; }
    }
    public class Acteur1 : IActeur1
    {
        public int MonObjetID { get; set; }
        public string MonObjetPersonneNon { get; set; }
        public string MonObjetPersonnePrenom { get; set; }
    }
    public class CastelWindsorViaConstructeur
    {
        public CastelWindsorViaConstructeur() { }
        public CastelWindsorViaConstructeur(
			IActeur0 MyActeur0, IActeur1 MyActeur1
			)
        {
            _ActeurFilm0 = MyActeur0;
            _ActeurFilm1 = MyActeur1;
        }

        public void Casting()
        {
            _ActeurFilm0.MonObjetID = _ActeurFilm0.GetHashCode();
            _ActeurFilm0.MonObjetPersonneNon = "Connor";
            _ActeurFilm0.MonObjetPersonnePrenom = "John";

            _ActeurFilm1.MonObjetID = _ActeurFilm1.GetHashCode();
            _ActeurFilm1.MonObjetPersonneNon = "Connor";
            _ActeurFilm1.MonObjetPersonnePrenom = "Sarah";
        }

        #region Fields
        private IActeur0 _ActeurFilm0;
        private IActeur1 _ActeurFilm1;
        #endregion

    }

    public class GetActeur
    {
        public GetActeur()
        {
            _container = new WindsorContainer();
        
		_container.Register(
	Castle.MicroKernel.Registration.Component.For()
		);

        _container.Register(
	Castle.MicroKernel.Registration.Component.For().ImplementedBy()
		);

        _container.Register(
	Castle.MicroKernel.Registration.Component.For().ImplementedBy()
		);

            _Terminator = _container.Resolve();
            _Terminator.Casting();
        }

        public void Dispose()
        {
            if (_container != null)
                _container.Dispose();
        }

        #region Fields
        private IWindsorContainer _container;
        private CastelWindsorViaConstructeur _Terminator;
        #endregion

    }
}