zoukankan      html  css  js  c++  java
  • Unity 依赖注入构造器注入 CQ

    最近准备用Unity来改良系统。

    做了一些小测试,拿出来与大家分享一下。

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using Microsoft.Practices.Unity;
    using System.Diagnostics;
    
    namespace MyTest
    {
    
        [TestClass]
        public class UnitTest1
        {
    
            IUnityContainer mContainer;
            [TestInitialize()]
            public void MyTestInitialize() {
                mContainer = new UnityContainer();
            }
            
            class DependencyObject
            {
                public string Value { get; set; }
            }
    
            class LogicObject
            {
                private readonly DependencyObject mDependency;
                public LogicObject(DependencyObject dependency)
                {
                    mDependency = dependency;
                }
    
                public DependencyObject Dependency
                {
                    get { return mDependency; }
                }
            }
    
            [TestMethod]
            public void TestNormal()
            {
                var dependency = new DependencyObject();
                dependency.Value = "Dependency";
    
                var logicObj = new LogicObject(dependency);
    
                Assert.AreSame(logicObj.Dependency, dependency);
            }
    
            [TestMethod]
            public void TestUnityContainer()
            { 
                var dependency = new DependencyObject();
                dependency.Value = "Dependency";
    
                mContainer.RegisterInstance(typeof(DependencyObject), dependency);
                mContainer.RegisterType<LogicObject>();
    
                var logicObj = mContainer.Resolve<LogicObject>();
    
                Assert.AreSame(logicObj.Dependency, dependency);
            }
        }
    }
    

    TestNormal展示了传统的对象构造方式

    TestUnityContainer展示了使用Unity后,对象的构造方式。

    在当前的编程实践中,对象之间的依赖性变得复杂,要构造一个对象已经不是一件简单的事情,例如上面的例子,LogicObject对DependencyObject有依赖,所以在构造LogicObject之前,还不得不构造DependencyObject。而现实的情况可能还要复杂,DependencyObject本身可能也依赖于其它对象。所以要构造LogicObject变得更加复杂。为了解决这个问题,诞生了很多依赖注入框架。Unity就是其中一种,不过它也是通过ObjectBuilder来实现的。

    说到这里,很多人会质疑这种自动构造的过程,认为这个过程难以控制。就像TestNormal一样,在构造LogicObject时,我们可以从代码上了解到LogicObject对DependencyObject有依赖。而在TestUnityContainer中,这种依赖就不明显。

    关于这个问题,我不能回避,我会在今后讨论它。

  • 相关阅读:
    Python网络协议(osi七层协议)
    Python面向对象之反射,双下方法
    Python类的成员
    Python异常处理
    mysql 索引 慢查询优化 && 数据库性能优化
    数据库(视图、事务、存储过程、函数) && 数据库备份
    mysql数据库连接模块 pymysql && sql注入
    主线程与子线程的关系
    socket 编程实例 基于线程池实现服务端并发
    日常迷惑积累
  • 原文地址:https://www.cnblogs.com/czy/p/1692923.html
Copyright © 2011-2022 走看看