unity 转载

   
  <!DOCTYPE html>
  <html lang="zh-cn">
  <head>
  <meta charset="utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>.Net IOC框架入门之一 Unity - 心存善念 - 博客园</title>
  <link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=-hy83QNg62d4qYibixJzxMJkbf1P9fTBlqv7SK5zVL01"/>
  <link id="MainCss" type="text/css" rel="stylesheet" href="/skins/ThinkInside/bundle-ThinkInside.css?v=RRjf6pEarGnbXZ86qxNycPfQivwSKWRa4heYLB15rVE1"/>
  <link type="text/css" rel="stylesheet" href="/blog/customcss/108952.css?v=XK2kFap83aYF5sezr1agPqyiauU%3d"/>
  <link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/ThinkInside/bundle-ThinkInside-mobile.css?v=7KLBb8V0rc2yA8fbmGaHDyGb3rUQhG3DSX2DksEt9PU1"/>
  <link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/xcsn/rss"/>
  <link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/xcsn/rsd.xml"/>
  <link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/xcsn/wlwmanifest.xml"/>
  <script src="//common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script>
  <script type="text/javascript">var currentBlogApp = 'xcsn', cb_enable_mathjax=false;var isLogined=true;</script>
  <script src="/bundles/blog-common.js?v=d16NGD79qD3qnJt25hXDZ2sGoojamz2W5Rl4vT0CGVg1" type="text/javascript"></script>
  </head>
  <body>
  <a name="top"></a>
   
  <!--done-->
  <div id="home">
  <div id="header">
  <div id="blogTitle">
  <a id="lnkBlogLogo" href="http://www.cnblogs.com/xcsn/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="返回主页" /></a>
   
  <!--done-->
  <h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/xcsn/">心存善念</a></h1>
  <h2><strong style='color:#ddd'>穷且益坚,不坠青云之志。</strong></h2>
   
   
   
   
  </div><!--end: blogTitle 博客的标题和副标题 -->
  <div id="navigator">
   
  <ul id="navList">
  <li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
  <li><a id="blog_nav_myhome" class="menu" href="http://www.cnblogs.com/xcsn/">首页</a></li>
  <li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li>
  <li><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/%E5%BF%83%E5%AD%98%E5%96%84%E5%BF%B5">联系</a></li>
  <li><a id="blog_nav_rss" class="menu" href="http://www.cnblogs.com/xcsn/rss">订阅</a>
  <!--<a id="blog_nav_rss_image" class="aHeaderXML" href="http://www.cnblogs.com/xcsn/rss"><img src="//www.cnblogs.com/images/xml.gif" alt="订阅" /></a>--></li>
  <li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li>
  </ul>
  <div class="blogStats">
   
  <div id="blog_stats">
  <span id="stats_post_count">随笔 - 610&nbsp; </span>
  <span id="stats_article_count">文章 - 1&nbsp; </span>
  <span id="stats-comment_count">评论 - 107</span>
  </div>
   
  </div><!--end: blogStats -->
  </div><!--end: navigator 博客导航栏 -->
  </div><!--end: header 头部 -->
   
  <div id="main">
  <div id="mainContent">
  <div class="forFlow">
   
  <div id="post_detail">
  <!--done-->
  <div id="topics">
  <div class = "post">
  <h1 class = "postTitle">
  <a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/xcsn/p/7395900.html">.Net IOC框架入门之一 Unity</a>
  </h1>
  <div class="clear"></div>
  <div class="postBody">
  <div id="cnblogs_post_body" class="blogpost-body"><h2>一、概述</h2>
  <p>  IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。<br />  作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。<br />  依赖注入:&nbsp;当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。</p>
  <p>&nbsp;  Unity是微软Patterns &amp; Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器;</p>
  <p>  它支持常用的三种依赖注入方式:构造器注入(Constructor Injection)、属性注入(Property Injection),以及方法调用注入(Method Call Injection)。</p>
  <p>  现在Unity最新的版本的4.0版,可以在微软的开源站点&nbsp;https://github.com/unitycontainer/unity&nbsp;下载最新的发布版本。</p>
  <p>  通过使用Unity,我们能轻松构建松耦合结构的程序,从而让整个程序框架变得清晰和易于维护。</p>
  <h2>二、简单示例</h2>
  <p><span style="line-height: 1.5;">  创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目.</span></p>
  <h3><span style="line-height: 1.5;">Business类库</span></h3>
  <p>  类库代码</p>
  <p>  a、Business类库定义一个接口IUserService</p>
  <div class="cnblogs_code">
  <pre>namespace<span> Business
  {
  /// &lt;summary&gt;
  /// 显示信息
  /// &lt;/summary&gt;
  public interface<span> IUserService
  {
  string Display(string<span> mes);
  }
  }</span></span></span></pre>
  </div>
  <p>  b、Business类库实现接口</p>
  <div class="cnblogs_code">
  <pre>namespace<span> Business
  {
  public class<span> UserService : IUserService
  {
  /// &lt;summary&gt;
  /// 显示信息
  /// &lt;/summary&gt;
  /// &lt;param name="mes"&gt;&lt;/param&gt;
  public string Display(string<span> mes)
  {
  return "I say:" +<span> mes;
  }
  }
  }</span></span></span></span></pre>
  <p><span>&nbsp;</span></p>
  </div>
  <h3><span style="line-height: 1.5;">示例一</span></h3>
  <p><span style="line-height: 1.5;">  在Web.Mvc项目通过nuget添加unity.mvc5 (1.2.3)</span></p>
  <p><span style="line-height: 1.5;">&nbsp;  1.注册服务</span></p>
  <p><span style="line-height: 1.5;">  注册依赖使用依赖注入生效,</span>在Web.Mvc项目的Global.asax进行注册&nbsp;</p>
  <div class="cnblogs_code">
  <pre><span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Mvc;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Optimization;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Routing;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Business;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Unity.Mvc5;
   
  </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc
  {
  </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MvcApplication : System.Web.HttpApplication
  {
  </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Application_Start()
  {
  AreaRegistration.RegisterAllAreas();
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);
   
  </span><span style="color: #008000;">//</span><span style="color: #008000;">注入 Ioc</span>
  <span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">this</span><span style="color: #000000;">.BuildUnityContainer();
  DependencyResolver.SetResolver(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityDependencyResolver(container));
  }
   
   
  IUnityContainer BuildUnityContainer()
  {
  </span><span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityContainer();
  container.RegisterType</span>&lt;<span style="color: #ff0000;"><strong>IUserService</strong></span>, <span style="color: #ff0000;"><strong>UserService</strong></span>&gt;<span style="color: #000000;">();
  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> container;
  }
  }
  }</span></pre>
  </div>
  <p>  2.注入服务</p>
  <div class="cnblogs_code">
  <pre><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc.Controllers
  {
  </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> HomeController : Controller
  {
   
  </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> IUserService userService;
   
  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> HomeController(IUserService userService)
  {
  </span><span style="color: #0000ff;">this</span>.userService =<span style="color: #000000;"> userService;
  }
   
  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ActionResult Index()
  {
  ViewBag.Msg </span>= userService.Display(<span style="color: #800000;">"</span><span style="color: #800000;">hahaha</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> View();
  }
  }
  }</span></pre>
  </div>
  <p>e、在Index.cshtml找个地方写入@ViewBag.Msg 就可以,如</p>
  <div class="cnblogs_code">
  <pre>&lt;h1&gt;ASP.NET - @ViewBag.Msg&lt;/h1&gt;</pre>
  </div>
  <p>最后运行项目,实现效果</p>
  <h4>ASP.NET - I say:hahaha</h4>
  <h3>示例二</h3>
  <p>  本示例为2017.12.08补充。</p>
  <p>  创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目,在Web.Mvc项目通过nuget添加unity.mvc5&nbsp;(1.3.0)</p>
  <p>  命令:<strong>Install-Package Unity.Mvc5 -Version 1.3.0</strong></p>
  <p><strong>  </strong>安装后如图</p>
  <p>  <img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208151205202-990516951.png" alt="" /></p>
  <p>  1. 调用注册组件</p>
  <p>  在Global.asax.cs&nbsp;的Application_Start 方法添加&nbsp;UnityConfig.RegisterComponents() ,MVC会使用&nbsp;Unity.Mvc5的 DependencyResolver去解析服务</p>
  <div class="cnblogs_code">
  <pre><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Application_Start()
  {
  AreaRegistration.RegisterAllAreas();
  UnityConfig.RegisterComponents();</span><span style="color: #008000;">//</span><span style="color: #008000;">在此处添加</span>
  <span style="color: #000000;"> FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);
   
  }</span></pre>
  </div>
  <p>  2.注册服务</p>
  <p>  找到App_Start下的UnityConfig类,如下修改</p>
  <div class="cnblogs_code">
  <pre> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UnityConfig
  {
  </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> RegisterComponents()
  {
  </span><span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityContainer();
   
  </span><span style="color: #008000;">//</span><span style="color: #008000;">在这里使用container注册所有服务</span>
  container.RegisterType&lt;IUserService, UserService&gt;();<span style="color: #008000;">//</span><span style="color: #008000;">自定义的服务</span>
  <span style="color: #000000;">
  DependencyResolver.SetResolver(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityDependencyResolver(container));
  }
  }</span></pre>
  </div>
  <p>  3.修改控制器Home和页面Index</p>
  <p>  </p>
  <div class="cnblogs_code">
  <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> HomeController : Controller
  {
  </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> IUserService userService;
   
  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> HomeController(IUserService userService)
  {
  </span><span style="color: #0000ff;">this</span>.userService =<span style="color: #000000;"> userService;
  }
   
  </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ActionResult Index()
  {
  ViewBag.Name </span>= userService.Display(<span style="color: #800000;">"</span><span style="color: #800000;">我是 UNITY 1.3.0</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> View();
  }</span></pre>
  </div>
  <p>页面代码</p>
  <div class="cnblogs_code">
  <pre>&lt;div <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">jumbotron</span><span style="color: #800000;">"</span>&gt;
  &lt;h1&gt;Unity 入门&lt;/h1&gt;
  &lt;p <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">lead</span><span style="color: #800000;">"</span>&gt;@ViewBag.Name&lt;/p&gt;
  &lt;/div&gt;
  </pre>
  </div>
  <p>效果</p>
  <p><img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208152208359-1020384596.png" alt="" /></p>
  <p>&nbsp;</p>
  <h2><span style="font-size: 1.5em; line-height: 1.5;">三、注册封装</span></h2>
  <p>对示例一 的注册进行独立封装到BootStrapper中</p>
  <p>c、注册依赖使用依赖注入生效</p>
  <p>在Web.Mvc项目的Global.asax进行注册&nbsp;</p>
  <div class="cnblogs_code">
  <pre><span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Mvc;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Optimization;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Routing;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Business;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Unity.Mvc5;
   
  </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc
  {
  </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> MvcApplication : System.Web.HttpApplication
  {
  </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Application_Start()
  {
  AreaRegistration.RegisterAllAreas();
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);
   
  </span><span style="color: #008000;">//</span><span style="color: #008000;">注入 Ioc </span>
  <span style="color: #000000;"> BootStrapper.Initialise();
  }
  }
  }</span></pre>
  </div>
  <p>BootStrapper代码</p>
  <div class="cnblogs_code">
  <pre><span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Configuration;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Web.Mvc;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Business;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Practices.Unity.Configuration;
  </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Unity.Mvc5;
   
  </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Web.Mvc
  {
  </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> BootStrapper
  {
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span>
  <span style="color: #808080;">///</span><span style="color: #008000;"> 获取容器-注册依赖关系
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span>
  <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span>
  <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> IUnityContainer Initialise()
  {
  </span><span style="color: #0000ff;">var</span> container =<span style="color: #000000;"> BulidUnityContainer();
  DependencyResolver.SetResolver(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityDependencyResolver(container));
  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> container;
  }
   
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span>
  <span style="color: #808080;">///</span><span style="color: #008000;"> 加载容器
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span>
  <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span>
  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> IUnityContainer BulidUnityContainer()
  {
  </span><span style="color: #0000ff;">var</span> container = <span style="color: #0000ff;">new</span><span style="color: #000000;"> UnityContainer();
  RegisterTypes(container);
  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> container;
  }
   
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span>
  <span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span>
  <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;param name="container"&gt;&lt;/param&gt;</span>
  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> RegisterTypes(IUnityContainer container)
  {
  </span><span style="color: #008000;">//</span><span style="color: #008000;">类型的配置容器注册</span>
  container.RegisterType&lt;IUserService, UserService&gt;<span style="color: #000000;">();
  </span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterType&lt;IUserService, UserService&gt;(new ContainerControlledLifetimeManager());</span><span style="color: #008000;">//</span><span style="color: #008000;">通过生命周期实现了单例模式
   
  </span><span style="color: #008000;">//</span><span style="color: #008000;">已有对象实例的配置容器注册,也为单例
  </span><span style="color: #008000;">//</span><span style="color: #008000;">UserService userService = new UserService();
  </span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterInstance&lt;IUserService&gt;(userService);</span>
  <span style="color: #000000;">
  }
  }
  }</span></pre>
  </div>
  <h3 id="xishuai_h7">Unity注册配置</h3>
  <p>&nbsp;修改上面的方法,将注册放到配置文件中</p>
  <p>1.方法修改</p>
  <div class="cnblogs_code">
  <pre> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span>
  <span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入
  </span><span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span>
  <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;param name="container"&gt;&lt;/param&gt;</span>
  <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> RegisterTypes(IUnityContainer container)
  {
  </span><span style="color: #808080;">///</span><span style="color: #008000;">/依赖关系可以选择代码形式,也可以用配置文件的形式</span>
  UnityConfigurationSection config =<span style="color: #000000;"> (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
  config.Configure(container, </span><span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  }</span></pre>
  </div>
  <pre><span>UnityConfigurationSection.SectionName为unity</span></pre>
  <p>2.配置文件</p>
  <p>&nbsp;提示:自定义web.config节点来实现</p>
  <div class="cnblogs_code">
  <pre>&lt;configuration&gt;
  &lt;configSections&gt;
  &lt;section name=<span style="color: #800000;">"</span><span style="color: #800000;">unity</span><span style="color: #800000;">"</span> type=<span style="color: #800000;">"</span><span style="color: #800000;">Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration</span><span style="color: #800000;">"</span>/&gt;
  &lt;!-- 一般将unity节点放到文件末尾 --&gt;
  &lt;/configSections&gt;
   
  &lt;unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>&gt;
  &lt;<span style="color: #0000ff;">namespace</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /&gt;
  &lt;assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /&gt;
  &lt;containers&gt;
  &lt;container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>&gt;
  &lt;register type=<span style="color: #800000;">"</span><span style="color: #800000;">IUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">UserService</span><span style="color: #800000;">"</span>&gt;
  &lt;lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /&gt;
  &lt;/register&gt;
  &lt;register type=<span style="color: #800000;">"</span><span style="color: #800000;">ILocalUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">LocalUserService</span><span style="color: #800000;">"</span>/&gt;
  &lt;/container&gt;
  &lt;/containers&gt;
  &lt;/unity&gt;
  &lt;/configuration&gt;</pre>
  </div>
  <p>或者为</p>
  <p><strong>直接指定命名空间</strong></p>
  <div class="cnblogs_code">
  <pre> &lt;unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>&gt;
  &lt;assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /&gt;
  &lt;containers&gt;
  &lt;container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>&gt;
  &lt;register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.IUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.UserService</span><span style="color: #800000;">"</span>&gt;
  &lt;lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /&gt;
  &lt;/register&gt;
  &lt;register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.ILocalUserService</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.LocalUserService</span><span style="color: #800000;">"</span>/&gt;
  &lt;/container&gt;
  &lt;/containers&gt;
  &lt;/unity&gt;</pre>
  </div>
  <p>或者为</p>
  <p><strong>指定程序集名称</strong></p>
  <div class="cnblogs_code">
  <pre> &lt;unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>&gt;
  &lt;containers&gt;
  &lt;container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>&gt;
  &lt;register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.IUserService,Business</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.UserService,Business</span><span style="color: #800000;">"</span>&gt;
  &lt;lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /&gt;
  &lt;/register&gt;
  &lt;register type=<span style="color: #800000;">"</span><span style="color: #800000;">Business.ILocalUserService,Business</span><span style="color: #800000;">"</span> mapTo=<span style="color: #800000;">"</span><span style="color: #800000;">Business.LocalUserService,Business</span><span style="color: #800000;">"</span>/&gt;
  &lt;/container&gt;
  &lt;/containers&gt;
  &lt;/unity&gt;</pre>
  </div>
  <p>&nbsp;</p>
  <p>&nbsp;源码下载:https://gitee.com/zmsofts/XinCunShanNianDaiMa/blob/master/IocDemo.rar</p>
  <p>&nbsp;</p>
  <p>参考网址:</p>
  <p>http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html</p>
  <p>https://www.lanhusoft.com/Article/108.html</p>
  <p>http://blog.csdn.net/xingxing513234072/article/details/21176247</p>
  <p>http://www.cnblogs.com/wwj1992/p/6728370.html</p>
  <p>http://www.cnblogs.com/xishuai/p/3670292.html(推荐)</p>
  <p>&nbsp;</p></div><div id="MySignature"></div>
  <div class="clear"></div>
  <div id="blog_post_info_block">
  <div id="BlogPostCategory"></div>
  <div id="EntryTag"></div>
  <div id="blog_post_info">
  </div>
  <div class="clear"></div>
  <div id="post_next_prev"></div>
  </div>
   
   
  </div>
  <div class = "postDesc">posted @ <span id="post-date">2017-08-19 11:02</span> <a href='http://www.cnblogs.com/xcsn/'>心存善念</a> 阅读(<span id="post_view_count">...</span>) 评论(<span id="post_comment_count">...</span>) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7395900" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(7395900);return false;">收藏</a></div>
  </div>
  <script type="text/javascript">var allowComments=true,cb_blogId=108952,cb_entryId=7395900,cb_blogApp=currentBlogApp,cb_blogUserGuid='7388f513-af54-e111-aa3f-842b2b196315',cb_entryCreatedDate='2017/8/19 11:02:00';loadViewCount(cb_entryId);var cb_postType=1;</script>
   
  </div><!--end: topics 文章、评论容器-->
  </div><a name="!comments"></a><div id="blog-comments-placeholder"></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
  <div id='comment_form' class='commentform'>
  <a name='commentform'></a>
  <div id='divCommentShow'></div>
  <div id='comment_nav'><span id='span_refresh_tips'></span><a href='javascript:void(0);' onclick='return RefreshCommentList();' id='lnk_RefreshComments' runat='server' clientidmode='Static'>刷新评论</a><a href='#' onclick='return RefreshPage();'>刷新页面</a><a href='#top'>返回顶部</a></div>
  <div id='comment_form_container'></div>
  <div class='ad_text_commentbox' id='ad_text_under_commentbox'></div>
  <div id='ad_t2'></div>
  <div id='opt_under_post'></div>
  <div id='cnblogs_c1' class='c_ad_block'></div>
  <div id='under_post_news'></div>
  <div id='cnblogs_c2' class='c_ad_block'></div>
  <div id='under_post_kb'></div>
  <div id='HistoryToday' class='c_ad_block'></div>
  <script type='text/javascript'>
  fixPostBody();
  setTimeout(function () { incrementViewCount(cb_entryId); }, 50);
  deliverAdT2();
  deliverAdC1();
  deliverAdC2();
  loadNewsAndKb();
  loadBlogSignature();
  LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
  GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType);
  loadOptUnderPost();
  GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
  </script>
  </div>
   
   
  </div><!--end: forFlow -->
  </div><!--end: mainContent 主体内容容器-->
   
  <div id="sideBar">
  <div id="sideBarMain">
   
  <!--done-->
  <div class="newsItem">
  <h3 class="catListTitle">公告</h3>
  <div id="blog-news"></div><script type="text/javascript">loadBlogNews();</script>
  </div>
   
  <div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script>
   
  <div id="leftcontentcontainer">
  <div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script>
  </div>
   
  </div><!--end: sideBarMain -->
  </div><!--end: sideBar 侧边栏容器 -->
  <div class="clear"></div>
  </div><!--end: main -->
  <div class="clear"></div>
  <div id="footer">
   
  <!--done-->
  Copyright &copy;2018 心存善念
  </div><!--end: footer -->
  </div><!--end: home 自定义的最大容器 -->
  <!--PageEndHtml Block Begin-->
  <script language="javascript" type="text/javascript">
  // 生成目录索引列表
  function GenerateContentList()
  {
  var mainContent = $('#cnblogs_post_body');
  var h2_list = $('#cnblogs_post_body h2');
   
  if(mainContent.length < 1)
  return;
   
  if(h2_list.length>0)
  {
  var content = '';
  content += '<div class="navCategory" id="navCategory">';
  content += '<span style="font-size:16px;color:#0000FF;padding-left:10px"><b>目录导航</b></span>';
  content += '<ul>';
  for(var i=0; i<h2_list.length; i++)
  {
  var li2_anchor = '<a name="h2_' + i + '"></a>';
  $(h2_list[i]).before(li2_anchor);
   
  var h3_list = $(h2_list[i]).nextAll("h3");
  var li3_content = '';
  for(var j=0; j<h3_list.length; j++)
  {
  var tmp = $(h3_list[j]).prevAll('h2').first();
  if(!tmp.is(h2_list[i]))
  break;
  var li3_anchor = '<a name="h3_' + i + '_' + j + '"></a>';
  $(h3_list[j]).before(li3_anchor);
  li3_content += '<li><a href="#h3_' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>';
  }
   
  var li2_content = '';
  if(li3_content.length > 0)
  li2_content = '<li><a href="#h2_' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';
  else
  li2_content = '<li><a href="#h2_' + i + '">' + $(h2_list[i]).text() + '</a></li>';
  content += li2_content;
  }
  content += '</ul>';
  content += '</div>';
  if($('#cnblogs_post_body').length != 0 )
  {
  $($('#cnblogs_post_body')[0]).prepend(content);
  }
  }
  }
   
  GenerateContentList();
   
   
  var shareTag = '<blockquote><p>作者:<a href="http://www.cnblogs.com/xcsn">心存善念</a><br>本文地址:<a href="'+ location.href +'" class="uri">'+ location.href +'</a><br>欢迎转载,请在明显位置给出出处及链接。</p></blockquote>';
  $("#cnblogs_post_body").append(shareTag);
   
  $("#blog-news").before('<img src="https://s11.flagcounter.com/count2/gPa8/bg_4078C0/txt_ffffff/border_CCCCCC/columns_3/maxflags_12/viewers_0/labels_0/pageviews_0/flags_0/percent_0/" alt="Flag Counter" border="0">');
   
  </script>
  <div style="display:none">
  <script>
  var _hmt = _hmt || [];
  (function() {
  var hm = document.createElement("script");
  hm.src = "//hm.baidu.com/hm.js?aaea1994210cb8b6eefcdea7143a1ff1";
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
  })();
   
  //$("#cnblogs_post_body").append('<p style="border:1px dashed #ddd;padding:5px;"><span style="color:green;font-size:14px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;微信扫一扫,谢谢打赏</strong></span><br><img width=220 src="https://images.cnblogs.com/cnblogs_com/xcsn/917826/o_weixin_pic.jpg"></p>');
   
  //$(".day .dayTitle:first").before('<a href="http://tb.xmlv.cn/" target="_blank"><img src="http://tb.xmlv.cn/ad/ad1.png" width = "100%"/></a>');
  $(".day .dayTitle:first").before('<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=eni2075d&utm_source=eni2075d" target="_blank"><img src="http://static.xmlv.cn/yundashi.png" width = "100%"/></a>');
  </script>
  </div>
  <!--PageEndHtml Block End-->
  </body>
  </html>
   

猜你喜欢

转载自www.cnblogs.com/mushaofeng/p/9153987.html