• Setter注入(Setter Injection)


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace Demo.BLL
    {
        #region 调用
        public class Demo
        {
            public void Test()
            {
                ITimeProvider timeProvider = (new Assembler()).Create<ITimeProvider>();
                Client _client = new Client();
                _client.timeProvider = timeProvider;
                Console.WriteLine(_client.GetYear());
                Console.WriteLine(_client.GetDatetime());
    
    
                //setterInjection
                IServiceClass serviceA = new ServiceClassA();
                IServiceClass serviceB = new ServiceClassB();
                ClientClass client = new ClientClass();
    
                client.Set_ServiceImpl(serviceA);
                client.ShowInfo();
                client.Set_ServiceImpl(serviceB);
                client.ShowInfo();
                Console.ReadLine();
    
            }
        } 
        #endregion
    
        #region 属性接口
    
        public interface ITimeProvider
        {
            DateTime CurrentDate { get; }
            string CurrentYear { get; }
        }
        public class TimeProvider : ITimeProvider
        {
            public DateTime CurrentDate { get { return DateTime.Now; } }
            public string CurrentYear { get { return DateTime.Now.Year.ToString(); } }
        }
        public class Assembler
        {
            private static Dictionary<Type, Type> dictionary = new Dictionary<Type, Type>();
            public Assembler()
            {
                dictionary.Add(typeof(ITimeProvider), typeof(TimeProvider));
            }
            public object Create(Type type)
            {
                if (type == null || !dictionary.ContainsKey(type)) throw new NullReferenceException();
                Type targetType = dictionary[type];
                return Activator.CreateInstance(targetType);
            }
    
            public T Create<T>()
            {
                return (T)Create(typeof(T));
            }
        }
        public class Client
        {
            public ITimeProvider timeProvider { get; set; }
            public string GetYear()
            {
                return timeProvider.CurrentYear.ToString();
            }
            public string GetDatetime()
            {
                return timeProvider.CurrentDate.ToString();
            }
        }
        #endregion
    
        #region 方法接口
    
        internal interface IServiceClass
        {
            string ServiceInfo();
        }
        internal class ServiceClassA : IServiceClass
        {
            public string ServiceInfo()
            {
                return "我是ServceClassA";
            }
        }
        internal class ServiceClassB : IServiceClass
        {
            public string ServiceInfo()
            {
                return "我是ServceClassB";
            }
        }
        internal class ClientClass
        {
            private IServiceClass _serviceImpl;
            public void Set_ServiceImpl(IServiceClass serviceImpl)
            {
                this._serviceImpl = serviceImpl;
            }
    
            public void ShowInfo()
            {
                Console.WriteLine(_serviceImpl.ServiceInfo());
            }
        }
        #endregion
    }
    View Code
  • 相关阅读:
    (转)50道JavaScript基础面试题(附答案)
    (转)44 道 JavaScript 难题
    web本地存储(localStorage、sessionStorage)
    (转)在 vue-cli 脚手架中引用 jQuery、bootstrap 以及使用 sass、less 编写 css [vue-cli配置入门]
    (转)Vue 爬坑之路(四)—— 与 Vuex 的第一次接触
    vue 路由传参 params 与 query两种方式的区别
    (转)Vue 爬坑之路(三)—— 使用 vue-router 跳转页面
    【半原创】将js和css文件装入localStorage加速程序执行
    SqlAgent备份脚本
    读<css世界>笔记之img标签
  • 原文地址:https://www.cnblogs.com/hofmann/p/12532281.html
Copyright © 2020-2023  润新知