pmunin
3/29/2017 - 7:13 PM

Services Utils - automatic registration using AutoFac as dependency

Services Utils - automatic registration using AutoFac as dependency

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

namespace ServicesUtils
{
    public partial class Services : IServiceProvider
    {
        public static IServiceProvider Current { get; } = new Services();

        T IServiceProvider.Get<T>(object key)
        {
            if (key == null)
                return Container.ResolveOptional<T>();
            else
                return Container.ResolveOptionalKeyed<T>(key);
        }

        public static T Get<T>(object key = null) where T : class
        {
            return ((IServiceProvider)Current).Get<T>(key);
        }

        public static IEnumerable<T> GetAll<T>() where T : class
        {
            return ((IServiceProvider)Current).GetAll<T>();
        }

        IEnumerable<T> IServiceProvider.GetAll<T>()
        {
            return Container.Resolve<IEnumerable<T>>();
        }
        private static IContainer Container { get; set; }
        public static void Configure(Action<ContainerBuilder> config)
        {
            var builder = new ContainerBuilder();
            config(builder);
            if (Container == null)
                Container = builder.Build();
            else
#pragma warning disable CS0618 // Type or member is obsolete
                builder.Update(Container);
#pragma warning restore CS0618 // Type or member is obsolete
        }

    }

}
using System;
using System.Collections.Generic;
using System.Text;

namespace ServicesUtils
{
    public interface IServiceProvider
    {
        T Get<T>(object key=null) where T:class;
        IEnumerable<T> GetAll<T>() where T:class;
    }
}

IoC wraps Autofac for using dynamic services