zoukankan      html  css  js  c++  java
  • 接口注入

    public interface ITimeProvider
        {
            DateTime CurrentDate { get; }
        }
        public interface IobjectWithTimeProvider
        {
            ITimeProvider TimeProvider { get; set; }
        }
        public class TimeProvider : ITimeProvider
        {
            public DateTime CurrentDate { get { return DateTime.Now; } }
        }
    
        //下面实现这个Assembler
        public class Assembler
        {
            static Dictionary<Type, Type> dictionary = new Dictionary<Type, Type>();
            static Assembler()
            {
                dictionary.Add(typeof(ITimeProvider), typeof(TimeProvider));
            }
    
            public object Creat(Type type)
            {
                if ((type == null) || !dictionary.ContainsKey(type))
                    throw new NullReferenceException();
                return Activator.CreateInstance(dictionary[type]);
            }
    
            //泛型方式调用
            public T Creat<T>()
            {
                return (T)Creat(typeof(T));
            }
        }
    
        public class Client : IobjectWithTimeProvider
        {
           public ITimeProvider TimeProvider { get; set; }
        }
     [TestClass()]
        public class ClientTest
        {
    
            [TestMethod]
            public void Test()
            {
                ITimeProvider timeprovider = (new Assembler()).Creat<ITimeProvider>();
                IobjectWithTimeProvider objectprovider = new Client();
                objectprovider.TimeProvider = timeprovider;
            }
           
        }

    与值注入有点类似,客户端去实现这个接口,这样客户端就可以获得类型,然后通过Assembler实现再通过赋值的形式注入

  • 相关阅读:
    JavaSE之流程控制结构
    JavaSE的基本语法
    排序算法
    Java实现归并排序
    Java中线程池的介绍
    Java锁的升降级及synchoronized优化
    ThreadLocal应用与原理
    spring bean 实例化bean前后进行相应的设置
    maven依赖配置和依赖范围
    springmvc校验
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2983458.html
Copyright © 2011-2022 走看看