unity 入门转载

<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"><div class="navCategory" id="navCategory"><span style="font-size:16px;color:#0000FF;padding-left:10px"><b>目录导航</b></span><ul><li><a href="#h2_0">一、概述</a></li><li><a href="#h2_1">二、简单示例</a><ul><li><a href="#h3_1_0">Business类库</a></li><li><a href="#h3_1_1">示例一</a></li><li><a href="#h3_1_2">示例二</a></li></ul></li><li><a href="#h2_2">三、注册封装</a><ul><li><a href="#h3_2_0">Unity注册配置</a></li></ul></li></ul></div><a name="h2_0"></a><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>
<a name="h2_1"></a><h2>二、简单示例</h2>
<p><span style="line-height: 1.5;">  创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目.</span></p>
<a name="h3_1_0"></a><h3><span style="line-height: 1.5;">Business类库</span></h3>
<p>  类库代码</p>
<p>  a、Business类库定义一个接口IUserService</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<pre>namespace<span> Business
{
/// &lt;summary&gt;
/// 显示信息
/// &lt;/summary&gt;
public interface<span> IUserService
{
string Display(string<span> mes);
}
}</span></span></span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>  b、Business类库实现接口</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<a name="h3_1_1"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>  2.注入服务</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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>
<a name="h3_1_2"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>  2.注册服务</p>
<p>  找到App_Start下的UnityConfig类,如下修改</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>  3.修改控制器Home和页面Index</p>
<p>  </p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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>
<a name="h2_2"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>BootStrapper代码</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<a name="h3_2_0"></a><h3 id="xishuai_h7">Unity注册配置</h3>
<p>&nbsp;修改上面的方法,将注册放到配置文件中</p>
<p>1.方法修改</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<pre><span>UnityConfigurationSection.SectionName为unity</span></pre>
<p>2.配置文件</p>
<p>&nbsp;提示:自定义web.config节点来实现</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>或者为</p>
<p><strong>直接指定命名空间</strong></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>或者为</p>
<p><strong>指定程序集名称</strong></p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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><blockquote><p>作者:<a href="http://www.cnblogs.com/xcsn">心存善念</a><br>本文地址:<a href="https://www.cnblogs.com/xcsn/p/7395900.html" class="uri">https://www.cnblogs.com/xcsn/p/7395900.html</a><br>欢迎转载,请在明显位置给出出处及链接。</p></blockquote></div><div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="BlogPostCategory">分类: <a href="http://www.cnblogs.com/xcsn/category/442688.html" target="_blank">04 .NET</a></div>
<div id="EntryTag"></div>
<div id="blog_post_info"><div id="green_channel">
<a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(7395900,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>
<a id="green_channel_follow" onclick="follow('7388f513-af54-e111-aa3f-842b2b196315');" href="javascript:void(0);">关注我</a>
<a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
<a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>
<a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a>
</div>
<div id="author_profile">
<div id="author_profile_info" class="author_profile_info">
<a href="http://home.cnblogs.com/u/xcsn/" target="_blank"><img src="//pic.cnblogs.com/face/374636/20170905230030.png" class="author_avatar" alt=""></a>
<div id="author_profile_detail" class="author_profile_info">
<a href="http://home.cnblogs.com/u/xcsn/">心存善念</a><br>
<a href="http://home.cnblogs.com/u/xcsn/followees">关注 - 44</a><br>
<a href="http://home.cnblogs.com/u/xcsn/followers">粉丝 - 223</a>
</div>
</div>
<div class="clear"></div>
<div id="author_profile_honor"></div>
<div id="author_profile_follow">
<a href="javascript:void(0);" onclick="follow('7388f513-af54-e111-aa3f-842b2b196315');return false;">+加关注</a>
</div>
</div>
<div id="div_digg">
<div class="diggit" onclick="votePost(7395900,'Digg')">
<span class="diggnum" id="digg_count">2</span>
</div>
<div class="buryit" onclick="votePost(7395900,'Bury')">
<span class="burynum" id="bury_count">0</span>
</div>
<div class="clear"></div>
<div class="diggword" id="digg_tips">
</div>
</div>
<script type="text/javascript">
currentDiggType = 0;
</script></div>
<div class="clear"></div>
<div id="post_next_prev"><a href="http://www.cnblogs.com/xcsn/p/7357280.html" class="p_n_p_prefix">« </a> 上一篇:<a href="http://www.cnblogs.com/xcsn/p/7357280.html" title="发布于2017-08-14 13:23">第五章 MVC之Bundle详解</a><br><a href="http://www.cnblogs.com/xcsn/p/7434545.html" class="p_n_p_prefix">» </a> 下一篇:<a href="http://www.cnblogs.com/xcsn/p/7434545.html" title="发布于2017-08-26 09:29">Head First设计模式之单例模式</a><br></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">172</span>) 评论(<span id="post_comment_count">0</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><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"><div class="navCategory" id="navCategory"><span style="font-size:16px;color:#0000FF;padding-left:10px"><b>目录导航</b></span><ul><li><a href="#h2_0">一、概述</a></li><li><a href="#h2_1">二、简单示例</a><ul><li><a href="#h3_1_0">Business类库</a></li><li><a href="#h3_1_1">示例一</a></li><li><a href="#h3_1_2">示例二</a></li></ul></li><li><a href="#h2_2">三、注册封装</a><ul><li><a href="#h3_2_0">Unity注册配置</a></li></ul></li></ul></div><a name="h2_0"></a><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>

<a name="h2_1"></a><h2>二、简单示例</h2>

<p><span style="line-height: 1.5;">  创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目.</span></p>

<a name="h3_1_0"></a><h3><span style="line-height: 1.5;">Business类库</span></h3>

<p>  类库代码</p>

<p>  a、Business类库定义一个接口IUserService</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<pre>namespace<span> Business

{

    /// &lt;summary&gt;

    /// 显示信息

    /// &lt;/summary&gt;

    public interface<span> IUserService

    {

        string Display(string<span> mes);

    }

}</span></span></span></pre>

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>  b、Business类库实现接口</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<a name="h3_1_1"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>  2.注入服务</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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>

<a name="h3_1_2"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>  2.注册服务</p>

<p>  找到App_Start下的UnityConfig类,如下修改</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>  3.修改控制器Home和页面Index</p>

<p>  </p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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>

<a name="h2_2"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>BootStrapper代码</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<a name="h3_2_0"></a><h3 id="xishuai_h7">Unity注册配置</h3>

<p>&nbsp;修改上面的方法,将注册放到配置文件中</p>

<p>1.方法修改</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<pre><span>UnityConfigurationSection.SectionName为unity</span></pre>

<p>2.配置文件</p>

<p>&nbsp;提示:自定义web.config节点来实现</p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>或者为</p>

<p><strong>直接指定命名空间</strong></p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

<p>或者为</p>

<p><strong>指定程序集名称</strong></p>

<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>

<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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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><blockquote><p>作者:<a href="http://www.cnblogs.com/xcsn">心存善念</a><br>本文地址:<a href="https://www.cnblogs.com/xcsn/p/7395900.html" class="uri">https://www.cnblogs.com/xcsn/p/7395900.html</a><br>欢迎转载,请在明显位置给出出处及链接。</p></blockquote></div><div id="MySignature"></div>

<div class="clear"></div>

<div id="blog_post_info_block">

<div id="BlogPostCategory">分类: <a href="http://www.cnblogs.com/xcsn/category/442688.html" target="_blank">04 .NET</a></div>

<div id="EntryTag"></div>

<div id="blog_post_info"><div id="green_channel">

        <a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(7395900,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>

            <a id="green_channel_follow" onclick="follow('7388f513-af54-e111-aa3f-842b2b196315');" href="javascript:void(0);">关注我</a>

    <a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>

    <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>

    <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a>

</div>

<div id="author_profile">

    <div id="author_profile_info" class="author_profile_info">

            <a href="http://home.cnblogs.com/u/xcsn/" target="_blank"><img src="//pic.cnblogs.com/face/374636/20170905230030.png" class="author_avatar" alt=""></a>

        <div id="author_profile_detail" class="author_profile_info">

            <a href="http://home.cnblogs.com/u/xcsn/">心存善念</a><br>

            <a href="http://home.cnblogs.com/u/xcsn/followees">关注 - 44</a><br>

            <a href="http://home.cnblogs.com/u/xcsn/followers">粉丝 - 223</a>

        </div>

    </div>

    <div class="clear"></div>

    <div id="author_profile_honor"></div>

    <div id="author_profile_follow">

                <a href="javascript:void(0);" onclick="follow('7388f513-af54-e111-aa3f-842b2b196315');return false;">+加关注</a>

    </div>

</div>

<div id="div_digg">

    <div class="diggit" onclick="votePost(7395900,'Digg')">

        <span class="diggnum" id="digg_count">2</span>

    </div>

    <div class="buryit" onclick="votePost(7395900,'Bury')">

        <span class="burynum" id="bury_count">0</span>

    </div>

    <div class="clear"></div>

    <div class="diggword" id="digg_tips">

    </div>

</div>

<script type="text/javascript">

    currentDiggType = 0;

</script></div>

<div class="clear"></div>

<div id="post_next_prev"><a href="http://www.cnblogs.com/xcsn/p/7357280.html" class="p_n_p_prefix">« </a> 上一篇:<a href="http://www.cnblogs.com/xcsn/p/7357280.html" title="发布于2017-08-14 13:23">第五章 MVC之Bundle详解</a><br><a href="http://www.cnblogs.com/xcsn/p/7434545.html" class="p_n_p_prefix">» </a> 下一篇:<a href="http://www.cnblogs.com/xcsn/p/7434545.html" title="发布于2017-08-26 09:29">Head First设计模式之单例模式</a><br></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">172</span>) 评论(<span id="post_comment_count">0</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>

<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"><div class="navCategory" id="navCategory"><span style="font-size:16px;color:#0000FF;padding-left:10px"><b>目录导航</b></span><ul><li><a href="#h2_0">一、概述</a></li><li><a href="#h2_1">二、简单示例</a><ul><li><a href="#h3_1_0">Business类库</a></li><li><a href="#h3_1_1">示例一</a></li><li><a href="#h3_1_2">示例二</a></li></ul></li><li><a href="#h2_2">三、注册封装</a><ul><li><a href="#h3_2_0">Unity注册配置</a></li></ul></li></ul></div><a name="h2_0"></a><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><a name="h2_1"></a><h2>二、简单示例</h2><p><span style="line-height: 1.5;">  创建一个mvc5项目 Web.Mvc,然后在创建一个Business类库,将类库添加引用到Web.Mvc项目.</span></p><a name="h3_1_0"></a><h3><span style="line-height: 1.5;">Business类库</span></h3><p>  类库代码</p><p>  a、Business类库定义一个接口IUserService</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><pre>namespace<span> Business{    /// &lt;summary&gt;    /// 显示信息    /// &lt;/summary&gt;    public interface<span> IUserService    {        string Display(string<span> mes);    }}</span></span></span></pre><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>  b、Business类库实现接口</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><a name="h3_1_1"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>  2.注入服务</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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><a name="h3_1_2"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>  2.注册服务</p><p>  找到App_Start下的UnityConfig类,如下修改</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>  3.修改控制器Home和页面Index</p><p>  </p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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><a name="h2_2"></a><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"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>BootStrapper代码</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><a name="h3_2_0"></a><h3 id="xishuai_h7">Unity注册配置</h3><p>&nbsp;修改上面的方法,将注册放到配置文件中</p><p>1.方法修改</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><pre><span>UnityConfigurationSection.SectionName为unity</span></pre><p>2.配置文件</p><p>&nbsp;提示:自定义web.config节点来实现</p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>或者为</p><p><strong>直接指定命名空间</strong></p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><p>或者为</p><p><strong>指定程序集名称</strong></p><div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><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 class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></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><blockquote><p>作者:<a href="http://www.cnblogs.com/xcsn">心存善念</a><br>本文地址:<a href="https://www.cnblogs.com/xcsn/p/7395900.html" class="uri">https://www.cnblogs.com/xcsn/p/7395900.html</a><br>欢迎转载,请在明显位置给出出处及链接。</p></blockquote></div><div id="MySignature"></div><div class="clear"></div><div id="blog_post_info_block"><div id="BlogPostCategory">分类: <a href="http://www.cnblogs.com/xcsn/category/442688.html" target="_blank">04 .NET</a></div><div id="EntryTag"></div><div id="blog_post_info"><div id="green_channel">        <a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(7395900,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>            <a id="green_channel_follow" onclick="follow('7388f513-af54-e111-aa3f-842b2b196315');" href="javascript:void(0);">关注我</a>    <a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>    <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>    <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a></div><div id="author_profile">    <div id="author_profile_info" class="author_profile_info">            <a href="http://home.cnblogs.com/u/xcsn/" target="_blank"><img src="//pic.cnblogs.com/face/374636/20170905230030.png" class="author_avatar" alt=""></a>        <div id="author_profile_detail" class="author_profile_info">            <a href="http://home.cnblogs.com/u/xcsn/">心存善念</a><br>            <a href="http://home.cnblogs.com/u/xcsn/followees">关注 - 44</a><br>            <a href="http://home.cnblogs.com/u/xcsn/followers">粉丝 - 223</a>        </div>    </div>    <div class="clear"></div>    <div id="author_profile_honor"></div>    <div id="author_profile_follow">                <a href="javascript:void(0);" onclick="follow('7388f513-af54-e111-aa3f-842b2b196315');return false;">+加关注</a>    </div></div><div id="div_digg">    <div class="diggit" onclick="votePost(7395900,'Digg')">        <span class="diggnum" id="digg_count">2</span>    </div>    <div class="buryit" onclick="votePost(7395900,'Bury')">        <span class="burynum" id="bury_count">0</span>    </div>    <div class="clear"></div>    <div class="diggword" id="digg_tips">    </div></div><script type="text/javascript">    currentDiggType = 0;</script></div><div class="clear"></div><div id="post_next_prev"><a href="http://www.cnblogs.com/xcsn/p/7357280.html" class="p_n_p_prefix">« </a> 上一篇:<a href="http://www.cnblogs.com/xcsn/p/7357280.html" title="发布于2017-08-14 13:23">第五章 MVC之Bundle详解</a><br><a href="http://www.cnblogs.com/xcsn/p/7434545.html" class="p_n_p_prefix">» </a> 下一篇:<a href="http://www.cnblogs.com/xcsn/p/7434545.html" title="发布于2017-08-26 09:29">Head First设计模式之单例模式</a><br></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">172</span>) 评论(<span id="post_comment_count">0</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>

posted @ 2018-06-08 09:45  木少丰  阅读(149)  评论(0)    收藏  举报