1. 程式人生 > >設計模式--IOC

設計模式--IOC

1. 實際控制類中,建構函式中 引數是 介面型別 

2.  註冊的哪個類實現的介面, 在實際控制類中就應用哪個類中的方法 

具體依賴抽象

/*ToggleBar依賴render才能正常工作,但render的構造卻不受它控制,它把控制權交給了具體的使用者,這就是控制反轉。render通過構造方法傳入,這個就叫依賴注入。*/

3.  工廠是抽象類,裡面有一些工廠的共性,不同工廠實現抽象工廠的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;

namespace IOC
{
    class Program
    {
        static void Main(string[] args)
        {
            UnityContainer container = new UnityContainer();
            container.RegisterType<IBookCategary, PhilosophyBook>();  // 註冊的是PhilosophyBook類,也可以註冊其他類

            container.RegisterType<IBookCategary, HistoryBook>();  // 註冊的是HistoryBook類,也可以註冊其他類

            IPeople people = container.Resolve<Reader>();
            people.ReadBook();
            Console.Read();
        }
    }

    //人介面
    public interface IPeople    
    {
      
        void ReadBook();
    }
    public interface IBookCategary
    {
        string PrintBookName();
    }
    public class PhilosophyBook : IBookCategary
    {
        public string PrintBookName()
        {
            return "這是一本哲學書";
        }
    }


    public class HistoryBook : IBookCategary
    {
        public string PrintBookName()
        {
            return "這是一本歷史書";
        }
    }

    public class Reader:IPeople
    {
        IBookCategary _book;
        /// <summary>
        /// 建構函式註冊
        /// </summary>
        /// <param name="pw"></param>
        public Reader(IBookCategary book)
        {
            _book = book;
        }

        public void ReadBook()
        {
            if (_book != null)
            {
                Console.WriteLine(_book.PrintBookName());
            }
         ;
        }
    }
}