应用框架的设计与实现.net平台--跨领域组件--IOC容器

来源:互联网 发布:色情网页站 源码 wap 编辑:程序博客网 时间:2024/05/29 16:26

首先来了解IOC

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。

为了是应用能有更好的扩展性,IOC容器必不可少,这里选用的是Unity 2.0.x作为IOC的容器,如下:

/// <summary>
    /// IOC 容器
    /// </summary>
    public static class Container
    {
        const string CONTAINER_NAME = "agile";


        static Lazy<IUnityContainer> _current;
        static UnityConfigurationSection _section;


        public static void Setup(string file)
        {
            var config = ConfigManager.Create(file);
            Setup(config);
        }


        public static void Setup(ConfigManager config)
        {
            _section = config.GetSection("unity") as UnityConfigurationSection;
        }


        static Container()
        {
            _current = new Lazy<IUnityContainer>(Create);
            
        }


        /// <summary>
        /// 创建一个子容器
        /// </summary>
        /// <returns></returns>
        public static IUnityContainer CreateChildContainer()
        {
            return Current.CreateChildContainer();
        }


        /// <summary>
        /// 创建一个新的容器
        /// </summary>
        /// <returns></returns>
        public static IUnityContainer CreateContainer()
        {
            return new UnityContainer();
        }


        static IUnityContainer Create()
        {


            var current = new UnityContainer();
            try
            {
                if (_section != null)
                    current.LoadConfiguration(_section, CONTAINER_NAME);
                else
                    current.LoadConfiguration(CONTAINER_NAME);
            }
            catch (System.Configuration.ConfigurationErrorsException ce)
            {
                throw new System.Configuration.ConfigurationErrorsException("Unity配置错误,请确认配置文件中存在Unity配置节", ce);
            }
            catch (ArgumentNullException)
            {


            }
            catch
            {
                throw;
            }
            _section = null;
            return current;
        }


        /// <summary>
        /// Unity容器<see cref="Microsoft.Practices.Unity.IUnityContainer"/>
        /// </summary>
        public static IUnityContainer Current
        {
            get
            {
                return _current.Value;
            }


        }
    }


0 0
原创粉丝点击