自己搭建IOC容器(C#)(二)实现Ioc容器基本功能

实现Ioc容器基本的类和功能

实现简单ioc容器的基本方式:通过一个Dictionary字典集合存储不同类型Type之间的对应关系,然后使用System.Activator.CreateInstance的系统方法,根据Type创建对象,实现注册和获取功能

核心代码:

通过System.Activator.CreateInstance,根据类型Type创建实体对象

   	 /// 
     /// 根据类型Type创建对象
     /// 
     /// 
     /// 
	private object CreateInstance(Type type)
	{
	    return System.Activator.CreateInstance(type);
	}

具体IOC容器实现代码:

实现两个注册方法Register(注册单个类型,注册接口-类型对应关系)和一个获取方法Get(获取类型的实体对象)

 public class IocContainer
    {
        private static Dictionary<Type, Type> relations = new Dictionary<Type, Type>();


        public IocContainer()
        {

        }

        /// 
        /// 注册单个类型
        /// 
        /// 
        public void Register<TService>()
        {
            relations[typeof(TService)] = typeof(TService);
        }
        /// 
        /// 注册接口和类型的关系
        /// 
        /// 
        /// 
        public void Register<ITService, TService>()
        {
            relations[typeof(ITService)] = typeof(TService);
        }

        /// 
        /// 获取类型的实体对象
        /// 
        /// 
        /// 
        public TService Get<TService>()
        {
            if (relations.TryGetValue(typeof(TService), out var service))
            {
                return (TService)CreateInstance(service);
            }
            return default(TService);
        }

        /// 
        /// 根据类型Type创建对象
        /// 
        /// 
        /// 
        private object CreateInstance(Type type)
        {
            return System.Activator.CreateInstance(type);
        }

    }

简单测试定义类型:

    internal interface IService
    {
        void Send(string msg);
    }
 
	internal class TestClass : IService
    {
        public void Send(string msg)
        {
            Console.WriteLine("TestClass Send: " + msg);
        }

    }


    internal class MyClass : IService
    {
        public void Send(string msg)
        {
            Console.WriteLine("MyClass Send: " + msg);

        }
    }

    internal class User
    {
        public string Name { get; set; }


        public void UsePhoneSend(string name, string msg)
        {
            Console.WriteLine($"User UsePhoneSend to {name} : {msg}");

        }
    }

测试的控制台代码:

 internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            IocContainer container = new IocContainer();

            container.Register<User>();
            container.Register<IService, TestClass>();
            container.Register<IService, MyClass>();



            var user = container.Get<User>();
            var service = container.Get<IService>();


            user.UsePhoneSend("ioc", "success");
            Console.WriteLine("------write Service------");
            service.Send("service success");

            Console.ReadKey();
        }
    }

测试结果:
自己搭建IOC容器(C#)(二)实现Ioc容器基本功能_第1张图片

更完整的实现:
自己搭建IOC容器(C#)(三)实现Ioc容器复杂功能

你可能感兴趣的:(IoC容器(C#),c#,.net)