中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

輕量級IOC容器IOCFactory發布。

發布時間:2020-07-27 22:16:12 來源:網絡 閱讀:1350 作者:持刀不搶劫 欄目:編程語言

這是我的第三篇討論IOC工廠的文章了,貌似我已經跟IOC工廠杠上了。輕量級IOC容器IOCFactory發布。

前兩篇是說的造輪子的過程。貌似沒什么人感興趣,那這次就直接發布輪子吧。


輕量級IOC容器IOCFactory發布。

上圖是 我的容器與 微軟的企業庫 unity的性能比較。

可以看見。效率是微軟企業庫的6倍。

使用依賴注入模式 效率也比微軟企業庫 要快。


目前支持以下幾種模式對象的創建

普通模式,

單例模式,

依賴注入模式,

裝飾模式,

以及單例注入模式


5種模式的獲取方式類似都是采用

Factory.Get<IType>([key])的方式進行獲取。


但是注冊有所不同。


factory.Regist<T, Q>(IOCFactoryModel.InstType.Normal);//普通模式
 factory.Regist<T, Q>(InstType.DI);//依賴注入模式
factory.Regist<T, Q>(InstType.Singleton);//單例模式
factory.RegistDecorate<T, Q>("catDog", "cat");//裝飾者模式
factory.Regist<T, Q>(InstType.DISingleton)//單例注入模式


下面是使用的示例代碼

namespace IOCFactoryUnitTest
{
    public interface Animal
    {
        string Hawl();
    }
    public interface Toy
    {
        string Play();
    }
    public class Ball : Toy
    {
        public string Play()
        {
            return "roll and roll";
        }
    }
    public class Dog : Animal
    {
        public string Hawl()
        {
            var returnValue = "wang wang wang";
            return returnValue;
        }
    }
    public class Cat : Animal
    {
        public string Hawl()
        {
            var returnValue = "miao miao miao";
            return returnValue;
        }
    }
    public class CatDog : Animal
    {
        private Animal toDecorate;
        public CatDog(Animal toDecorate)
        {
            this.toDecorate = toDecorate;
        }
        public string Hawl()
        {
            var returnValue = toDecorate.Hawl();
            returnValue += " wang wang wang";
            return returnValue;
        }
    }
    public class MachineCatDog : Animal
    {
        private Animal toDecorate;
        public MachineCatDog(Animal toDecorate)
        {
            this.toDecorate = toDecorate;
        }
        public string Hawl()
        {
            var returnValue = toDecorate.Hawl();
            returnValue += " hmm hmm hmm";
            return returnValue;
        }
    }
    public class SingleTonTest : Animal
    {
        private SingleTonTest() { }
        public string Hawl()
        {
            return this.GetHashCode().ToString();
        }
    }
    public class DITest
    {
        Animal animal;
        Toy toy;
        public DITest(Animal animal, Toy toy)
        {
            this.animal = animal;
            this.toy = toy;
        }
        public string Test()
        {
            return animal.Hawl() + this.toy.Play();
        }
    }
    [TestClass]
    public class IOCFactoryTest
    {
        [ClassInitialize()]
        public static void Init(TestContext context)
        {
            Factory factory = Factory.GetInst();
            factory.Regist<Animal, Cat>("cat", InstType.Normal);
            factory.Regist<Animal, Dog>("dog", InstType.Normal);
            factory.Regist<Animal, SingleTonTest>(InstType.Singleton);
            factory.RegistDecorate<Animal, CatDog>("catDog", "cat");
            factory.RegistDecorate<Animal, MachineCatDog>("catDog", "cat");
            factory.Regist<Toy, Ball>(InstType.Normal);
            factory.Regist<DITest, DITest>(InstType.DISingleton);
        }
        [TestCleanup]
        public void CleanUp()
        {
        }
        [TestMethod]
        public void NormalInstTest()
        {
            Factory factory = Factory.GetInst();
            var result = new Dog();
            var dog = factory.Get<Animal>("dog");
            Assert.AreEqual(dog.Hawl(), result.Hawl());
            var cat = factory.Get<Animal>("cat");
            Assert.AreNotEqual(cat.Hawl(), result.Hawl());
        }
        [TestMethod]
        public void SingleInstTest()
        {
            Factory factory = Factory.GetInst();
            var obj1 = factory.Get<Animal>();
            var obj2 = factory.Get<Animal>();
            Assert.AreEqual(obj1, obj2);
        }
        [TestMethod]
        public void DecorateInstTest()
        {
            Factory factory = Factory.GetInst();
            var dog = factory.Get<Animal>("dog");
            var cat = factory.Get<Animal>("cat");
            var catDog = factory.Get<Animal>("catDog");
            Assert.AreEqual(cat.Hawl() + " " + dog.Hawl() + " hmm hmm hmm", catDog.Hawl());
        }
        [TestMethod]
        public void DIInstTest()
        {
            Factory factory = Factory.GetInst();
            var ani = factory.Get<Animal>();
            var toy = factory.Get<Toy>();
            var result = factory.Get<DITest>();
            var result2 = factory.Get<DITest>();
            var exp = new DITest(ani, toy);
            Assert.AreEqual(exp.Test(), result.Test());
            Assert.AreEqual(result, result2);
        }
        [TestMethod]
        public void MultiThreadTest()
        {
            try
            {
                int count = 100;
                Action func = () => { for (var i = 0; i < count; i++) { DIInstTest(); } };
                var a = new Thread(new ThreadStart(func));
                var b = new Thread(new ThreadStart(func));
                var c = new Thread(new ThreadStart(func));
                a.Start();
                b.Start();
                c.Start();
            }
            catch (Exception ex)
            {
                Assert.Fail();
            }
            Assert.IsTrue(true);
        }
    }
}

類庫已經上傳到附件。有興趣的朋友可以下載

點擊 訪問github獲取本項目的最新代碼

附件:http://down.51cto.com/data/2363596
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铅山县| 塔城市| 根河市| 东兰县| 荃湾区| 竹北市| 牟定县| 凤庆县| 周口市| 公主岭市| 庆城县| 洛宁县| 福清市| 崇信县| 梅州市| 安徽省| 石门县| 太仆寺旗| 巴塘县| 临海市| 中西区| 抚松县| 临沂市| 泌阳县| 波密县| 青川县| 湘乡市| 隆安县| 罗山县| 阳谷县| 连江县| 新河县| 昌吉市| 辰溪县| 科尔| 荥经县| 南丰县| 突泉县| 波密县| 蕲春县| 南开区|