Unity Application Block 學習筆記 之 BuildUp方法

1、不使用BuildUp方法

    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();

            Fighter you = new Fighter();
            you.AK47.Fire();   //拋出異常,AK47屬性爲null

            Console.Read();
        }
    }


    public class Gun
    {
        public void Fire()
        {
            Console.WriteLine("砰砰砰");
        }
    }

    public class Fighter
    {
        public Gun AK47 { get;  set; }
    }    
2、使用Dependency+BuildUp
    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();
            container.RegisterType<Fighter>();

            Fighter you = new Fighter();
            container.BuildUp(you);
            you.AK47.Fire(); //"砰砰砰

            Console.Read();
        }
    }

    public class Gun
    {
        public void Fire()
        {
            Console.WriteLine("砰砰砰");
        }
    }

    public class Fighter
    {
        [Dependency]
        public Gun AK47  { get; set; }
    }
3、使用Dependency很方便,但是如果Fighter類不是你寫的,而是來自第三方類庫,那麼沒有辦法加此特性,需要使用運行時的屬性注入InjectionProperty
    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = new UnityContainer();
            container.RegisterType<Fighter>(new InjectionProperty("AK47")); //可以接受多個InjectionProperty

            Fighter you = new Fighter();
            container.BuildUp(you);
            you.AK47.Fire();

            Console.Read();
        }
    }

    public class Gun
    {
        public void Fire()
        {
            Console.WriteLine("砰砰砰");
        }
    }

    public class Fighter
    {
        public Gun AK47 { get; set; }
    }

4、結束語
      如果在Fighter中定義兩個屬性,一個使用Dependency特性注入,另一個使用運行時注入,則使用Dependency特性注入的屬性將會失敗
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章