1、首先创建FactoryApplication.cs应用程序文件继承HttpApplication
导入using System.Web.Security;
    using System.Configuration;
    using System.Web.SessionState;
    using Microsoft.Practices.Unity;
    using Microsoft.Practices.Unity.Configuration;
命名空间
Namespace WEB

    public class FactoryApplication : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            //在应用程序启动时运行的代码
            this.registerControllerFactory();
        }
        protected void Application_End(object sender, EventArgs e)
        {
            //在应用程序关闭时运行的代码
        }
        protected void Application_Error(object sender, EventArgs e)
        {
            //在出现未处理的错误时运行的代码
        }
        protected void Session_Start(object sender, EventArgs e)
        {
            //在新会话启动时运行的代码
        }
        protected void Session_End(object sender, EventArgs e)
        {
            //在会话结束时运行的代码。
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式
            //设置为 StateServer 或 SQLServer,则不会引发该事件。
        }
        private void registerControllerFactory()
        {
            IUnityContainer container=new UnityContainer();
            UnityConfigurationSection section=null;
            System.Configuration.Configuration config=null;
            ExeConfigurationFileMap map=new ExeConfigurationFileMap();
            
            map.ExeConfigFilename=GetMapPath("/Config/IDAL.Configuration.xml");
            config=ConfigurationManager.OpenMappedExeConfiguration(map,ConfigurationUserLevel.None);
            section=(UnityConfigurationSection)config.GetSection(unity);
            section.Containers.Default.Configure(container);
            
            Application.Add("container",container);
        }
        #region 获得当前绝对路径
        /// <summary>
        /// 获得当前绝对路径
        /// </summary>
        /// <param name="strPath">指定的路径</param>
        /// <returns>绝对路径</returns>
        private static string GetMapPath(string strPath)
        {
            if (HttpContext.Current != null)
            {
                return HttpContext.Current.Server.MapPath(strPath);
            }
            else //非web程序引用
            {
                strPath = strPath.Replace("/", "\\");
                if (strPath.StartsWith("\\"))
                {
                    strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\');
                }
                return                    System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,      strPath);
            }
        }
        #endregion
    }

2、修改Web项目的Global.asax文件 如下
<%@ Application Inherits="WEB.FactoryApplication" Language="C#" %>
3、在web项目中添加Config文件夹并给它添加IDAL.Configuration.xml文件
格式如下
<?xml version="1.0" encoding="utf-8" ?>
<!--DAL对象映射-->
<configuration>

<configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
  </configSections>

<unity>
    <typeAliases>
      <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
      <typeAlias alias="IUserInfor" type="IDAL.IUserInfor, IDAL" />
      <typeAlias alias="UserInfor" type="DAL.UserInfor, DAL" />
      <typeAlias alias="IRoles" type="IDAL.IRoles, IDAL"/>
      <typeAlias alias="Roles" type="DAL.Roles, SDAL" />
    </typeAliases>
    <containers>
      <container>
        <types>
          <type type="IUserInfor" mapTo="UserInfor" name="">
            <lifetime type="singleton" />
          </type>
          <type type="IRoles" mapTo="Roles" name="">
            <lifetime type="singleton" />
          </type>
        </types>
      </container>
    </containers>
  </unity>
</configuration>
4、创建工厂接口调用unity映射
导入using Microsoft.Practices.Unity;命名空间
namespace FactoryLibrary
{
    /// <summary>
    /// 创建对象工厂
    /// </summary>
    public class Factory
    {
        /// <summary>
        /// 创建数据层对象
        /// </summary>
        /// <typeparam name="TInterface">接口</typeparam>
        /// <returns></returns>
        public static TInterface CreateDAL<TInterface>()
        {
            IUnityContainer container = GetConatiner();
            return container.Resolve<TInterface>();
        }
        public static IUnityContainer GetConatiner()
        {
            return (IUnityContainer)System.Web.HttpContext.Current.Application["container"];
        }
    }
}
5、创建Model层 UserInfor、Roles
6、创建IDAL层 IUserInfor、IRoles
7、创建DAL层 UserInfor、Roles
8、创建BLL层 UserInfor、Roles
实现接口映射
IDAL.IUserInfor iUserInfor = FactoryLibrary.Factory.CreateDAL<IDAL.IUserInfor>();
IDAL.IRoles iRoles = FactoryLibrary.Factory.CreateDAL<IDAL.IRoles>();
原文链接:http://www.cnblogs.com/lonelyofsoul/archive/2012/03/21/unityapplicationblock.html

转载于:https://www.cnblogs.com/lonelyofsoul/archive/2012/03/21/unityapplicationblock.html

工厂 调用Unity Application Block 通过XML配置文件映射读取数据层方法相关推荐

  1. Unity Application Block 1.0系列文章

    Unity Application Block (Unity) 是微软 Patterns & Practices  团队开发的一个轻量级.可扩展的依赖注入容器,有助于构建松散耦合的系统.它支持 ...

  2. Unity Application Block 1.2 学习笔记 [转]

    昨天花了一天时间,把IOC/DI的相关文章以及Unity相关的一些文章基本在园子里搜了个遍 先给出几篇不错的文章链接: Unity Application Block官方网址 http://www.c ...

  3. Unity Application Block 1.2 学习笔记(zhuan)

    昨天花了一天时间,把IOC/DI的相关文章以及Unity相关的一些文章基本在园子里搜了个遍 先给出几篇不错的文章链接: Unity Application Block官方网址 http://www.c ...

  4. Unity Application Block 1.2 学习笔记

    昨天花了一天时间,把IOC/DI的相关文章以及Unity相关的一些文章基本在园子里搜了个遍 先给出几篇不错的文章链接: Unity Application Block官方网址 http://www.c ...

  5. Unity Application Block 发布

    今天Unity Application Block提前发布了,翻译一下下文纪念一下. 顺便推荐看看我整理的Castle方面的资料开源框架:Castle,这有助于你理解和使用Unity Applicat ...

  6. 微软模式与实践团队发布Enterprise Library 4.1及Unity Application Block 1.2

    微软模式与实践团队发布Enterprise Library 4.1及Unity Application Block 1.2,具体可参看InfoQ的新闻http://www.infoq.com/cn/n ...

  7. Unity Application Block 3月12 发布的版本

    3月12日,Unity 又发布了正式发布之前的版本,这个版本提供了安装程序.并且提供了一个依赖注入在实现方式:Setter injection 的配置API.之前发布的版本,属性注入需要用[Depen ...

  8. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  9. ajax 通过json xml文件,php+Ajax处理xml与json格式数据的方法示例

    本文实例讲述了php+Ajax处理xml与json格式数据的方法.分享给大家供大家参考,具体如下: 一.ajax如何处理xml数据格式 register.php 只需修改上一篇<php+Ajax ...

最新文章

  1. pycharm波浪线检查去掉
  2. 百分点集团发布中国首个行业AI决策系统产品Deep Matrix
  3. 同行评审以权谋私,让投稿人多引用自己文章,爱思唯尔将彻查此事
  4. 赠书:Redis 深度历险:核心原理与应用实践
  5. 查看tensorflow pb模型文件的节点信息
  6. 一步步实现:JPA的基本增删改查CRUD(jpa基于hibernate)
  7. Android 使用RadioButton+Fragment构建Tab
  8. Leet Code OJ 2. Add Two Numbers [Difficulty: Medium]
  9. React之mockjs+sass+生命周期函数
  10. 面试精讲之面试考点及大厂真题 - 分布式专栏 19 系统中的降级熔断设计
  11. 数据库学习--wildfly配置postgreSQL数据源
  12. JIRA数据库的迁移,从HSQL到MYSQL/Oracle
  13. 如何在js中实现html语言,如何使用脚本标签将JavaScript插入HTML
  14. Civil3D绘制路线
  15. brctl 命令详解
  16. TCL语言语法简介(上)
  17. “计算机组成原理”视频资料(加上全集链接啦)
  18. 计算机远程桌面连接软件,windows7远程桌面连接软件 提取自最新windows7,可运行于XP...
  19. ccleaner激活后又要注册_ccleaner如何激活? ccleaner注册激活图文步骤
  20. armbian 下载加速

热门文章

  1. C-free在编写代码的过程中遇到方向键失灵,回车键失灵,换行失灵,但是可以正常输入的解决办法!!!!!
  2. Python中变量判断
  3. 翁恺老师C语言学习笔记(十)指针_指针与数组
  4. 美元指数DXY短线走高10逾点,现报90.77
  5. 第一章 —— 简单工厂模式(节选自:《大话设计模式》)
  6. 第18章 Redis数据结构常用命令
  7. notepad++,vim驼峰命名与下划线的互相转换
  8. SQL SERVER数据类型与C#数据类型对照表
  9. 关于使用墙外安卓应用
  10. VS2010 + OpenCV2.3配置 ; 在VS2010下安装配置OpenCV2.3 ; 全程截图,绝对能配置好,不能的留言!...