zoukankan      html  css  js  c++  java
  • 构造注入

    这种方式就是在构造函数时候注入类型

    直接看例子

     public interface ITimeProvider
        {
            DateTime CurrentDate { get; }
        }
    
        public class TimeProvider : ITimeProvider
        {
            public DateTime CurrentDate { get { return DateTime.Now; } }
        }
    
        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
        {
            ITimeProvider timeProvider;
            public Client(ITimeProvider timeProvider)
            {
                this.timeProvider = timeProvider;
            }
        }

    那么客户端调用时候

            [TestMethod()]
            public void ClientConstructorTest()
            {
                ITimeProvider timeProvider = (new Assembler()).Creat<ITimeProvider>();
                Assert.IsNotNull(timeProvider);
                Client target = new Client(timeProvider);
            }

    这样又一次依赖Assembler达到客户端调用时候无需知道具体类型

  • 相关阅读:
    HDU3068 最长回文
    本周最后一天——4.18
    一周又结束了——4.14
    一本通1591:数字计数
    一本通1589:不要 62
    一本通1588:数字游戏
    洛谷P2657 [SCOI2009] windy 数
    一本通1587: 【例 3】Windy 数
    一本通1586:【 例 2】数字游戏
    安卓自动化测试(一)
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2983410.html
Copyright © 2011-2022 走看看