轻量级IOC容器IOCFactory发布。-创新互联

这是我的第三篇讨论IOC工厂的文章了,貌似我已经跟IOC工厂杠上了。轻量级IOC容器IOCFactory发布。

创新互联建站专注于网站建设|网站维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖木包装箱等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身策划品质网站。

前两篇是说的造轮子的过程。貌似没什么人感兴趣,那这次就直接发布轮子吧。

轻量级IOC容器IOCFactory发布。

上图是 我的容器与 微软的企业库 unity的性能比较。

可以看见。效率是微软企业库的6倍。

使用依赖注入模式 效率也比微软企业库 要快。

目前支持以下几种模式对象的创建

普通模式,

单例模式,

依赖注入模式,

装饰模式,

以及单例注入模式

5种模式的获取方式类似都是采用

Factory.Get([key])的方式进行获取。

但是注册有所不同。

factory.Regist(IOCFactoryModel.InstType.Normal);//普通模式
 factory.Regist(InstType.DI);//依赖注入模式
factory.Regist(InstType.Singleton);//单例模式
factory.RegistDecorate("catDog", "cat");//装饰者模式
factory.Regist(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("cat", InstType.Normal);
            factory.Regist("dog", InstType.Normal);
            factory.Regist(InstType.Singleton);
            factory.RegistDecorate("catDog", "cat");
            factory.RegistDecorate("catDog", "cat");
            factory.Regist(InstType.Normal);
            factory.Regist(InstType.DISingleton);
        }
        [TestCleanup]
        public void CleanUp()
        {
        }
        [TestMethod]
        public void NormalInstTest()
        {
            Factory factory = Factory.GetInst();
            var result = new Dog();
            var dog = factory.Get("dog");
            Assert.AreEqual(dog.Hawl(), result.Hawl());
            var cat = factory.Get("cat");
            Assert.AreNotEqual(cat.Hawl(), result.Hawl());
        }
        [TestMethod]
        public void SingleInstTest()
        {
            Factory factory = Factory.GetInst();
            var obj1 = factory.Get();
            var obj2 = factory.Get();
            Assert.AreEqual(obj1, obj2);
        }
        [TestMethod]
        public void DecorateInstTest()
        {
            Factory factory = Factory.GetInst();
            var dog = factory.Get("dog");
            var cat = factory.Get("cat");
            var catDog = factory.Get("catDog");
            Assert.AreEqual(cat.Hawl() + " " + dog.Hawl() + " hmm hmm hmm", catDog.Hawl());
        }
        [TestMethod]
        public void DIInstTest()
        {
            Factory factory = Factory.GetInst();
            var ani = factory.Get();
            var toy = factory.Get();
            var result = factory.Get();
            var result2 = factory.Get();
            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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:轻量级IOC容器IOCFactory发布。-创新互联
转载注明:http://scyanting.com/article/dgjoog.html