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> 依赖注入: 当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。</p>
<p> Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器;</p>
<p> 它支持常用的三种依赖注入方式:构造器注入(Constructor Injection)、属性注入(Property Injection),以及方法调用注入(Method Call Injection)。</p>
<p> 现在Unity最新的版本的4.0版,可以在微软的开源站点 https://github.com/unitycontainer/unity 下载最新的发布版本。</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
{
/// <summary>
/// 显示信息
/// </summary>
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
{
/// <summary>
/// 显示信息
/// </summary>
/// <param name="mes"></param>
public string Display(string<span> mes)
{
return "I say:" +<span> mes;
}
}
}</span></span></span></span></pre>
<p><span> </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;"> 1.注册服务</span></p>
<p><span style="line-height: 1.5;"> 注册依赖使用依赖注入生效,</span>在Web.Mvc项目的Global.asax进行注册 </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><<span style="color: #ff0000;"><strong>IUserService</strong></span>, <span style="color: #ff0000;"><strong>UserService</strong></span>><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><h1>ASP.NET - @ViewBag.Msg</h1></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 (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 的Application_Start 方法添加 UnityConfig.RegisterComponents() ,MVC会使用 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<IUserService, UserService>();<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><div <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">jumbotron</span><span style="color: #800000;">"</span>>
<h1>Unity 入门</h1>
<p <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">lead</span><span style="color: #800000;">"</span>>@ViewBag.Name</p>
</div>
</pre>
</div>
<p>效果</p>
<p><img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208152208359-1020384596.png" alt=""></p>
<p> </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进行注册 </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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 获取容器-注册依赖关系
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 加载容器
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></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<IUserService, UserService><span style="color: #000000;">();
</span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterType<IUserService, UserService>(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<IUserService>(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> 修改上面的方法,将注册放到配置文件中</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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></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> 提示:自定义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><configuration>
<configSections>
<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>/>
<!-- 一般将unity节点放到文件末尾 -->
</configSections>
<unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>>
<<span style="color: #0000ff;">namespace</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> />
<assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> />
<containers>
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>>
<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>>
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> />
</register>
<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>/>
</container>
</containers>
</unity>
</configuration></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> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>>
<assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> />
<containers>
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>>
<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>>
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> />
</register>
<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>/>
</container>
</containers>
</unity></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> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>>
<containers>
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>>
<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>>
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> />
</register>
<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>/>
</container>
</containers>
</unity></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> 源码下载:https://gitee.com/zmsofts/XinCunShanNianDaiMa/blob/master/IocDemo.rar</p>
<p> </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> </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> 依赖注入: 当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。</p>
<p> Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器;</p>
<p> 它支持常用的三种依赖注入方式:构造器注入(Constructor Injection)、属性注入(Property Injection),以及方法调用注入(Method Call Injection)。</p>
<p> 现在Unity最新的版本的4.0版,可以在微软的开源站点 https://github.com/unitycontainer/unity 下载最新的发布版本。</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
{
/// <summary>
/// 显示信息
/// </summary>
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
{
/// <summary>
/// 显示信息
/// </summary>
/// <param name="mes"></param>
public string Display(string<span> mes)
{
return "I say:" +<span> mes;
}
}
}</span></span></span></span></pre>
<p><span> </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;"> 1.注册服务</span></p>
<p><span style="line-height: 1.5;"> 注册依赖使用依赖注入生效,</span>在Web.Mvc项目的Global.asax进行注册 </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><<span style="color: #ff0000;"><strong>IUserService</strong></span>, <span style="color: #ff0000;"><strong>UserService</strong></span>><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><h1>ASP.NET - @ViewBag.Msg</h1></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 (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 的Application_Start 方法添加 UnityConfig.RegisterComponents() ,MVC会使用 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<IUserService, UserService>();<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><div <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">jumbotron</span><span style="color: #800000;">"</span>>
<h1>Unity 入门</h1>
<p <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">lead</span><span style="color: #800000;">"</span>>@ViewBag.Name</p>
</div>
</pre>
</div>
<p>效果</p>
<p><img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208152208359-1020384596.png" alt=""></p>
<p> </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进行注册 </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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 获取容器-注册依赖关系
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 加载容器
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></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<IUserService, UserService><span style="color: #000000;">();
</span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterType<IUserService, UserService>(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<IUserService>(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> 修改上面的方法,将注册放到配置文件中</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;"><summary></span>
<span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入
</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
<span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></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> 提示:自定义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><configuration>
<configSections>
<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>/>
<!-- 一般将unity节点放到文件末尾 -->
</configSections>
<unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>>
<<span style="color: #0000ff;">namespace</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> />
<assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> />
<containers>
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>>
<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>>
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> />
</register>
<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>/>
</container>
</containers>
</unity>
</configuration></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> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>>
<assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> />
<containers>
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>>
<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>>
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> />
</register>
<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>/>
</container>
</containers>
</unity></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> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>>
<containers>
<container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>>
<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>>
<lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> />
</register>
<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>/>
</container>
</containers>
</unity></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> 源码下载:https://gitee.com/zmsofts/XinCunShanNianDaiMa/blob/master/IocDemo.rar</p>
<p> </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> </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> 依赖注入: 当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。</p><p> Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器;</p><p> 它支持常用的三种依赖注入方式:构造器注入(Constructor Injection)、属性注入(Property Injection),以及方法调用注入(Method Call Injection)。</p><p> 现在Unity最新的版本的4.0版,可以在微软的开源站点 https://github.com/unitycontainer/unity 下载最新的发布版本。</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{ /// <summary> /// 显示信息 /// </summary> 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 { /// <summary> /// 显示信息 /// </summary> /// <param name="mes"></param> public string Display(string<span> mes) { return "I say:" +<span> mes; } }}</span></span></span></span></pre><p><span> </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;"> 1.注册服务</span></p><p><span style="line-height: 1.5;"> 注册依赖使用依赖注入生效,</span>在Web.Mvc项目的Global.asax进行注册 </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><<span style="color: #ff0000;"><strong>IUserService</strong></span>, <span style="color: #ff0000;"><strong>UserService</strong></span>><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><h1>ASP.NET - @ViewBag.Msg</h1></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 (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 的Application_Start 方法添加 UnityConfig.RegisterComponents() ,MVC会使用 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<IUserService, UserService>();<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><div <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">jumbotron</span><span style="color: #800000;">"</span>> <h1>Unity 入门</h1> <p <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">lead</span><span style="color: #800000;">"</span>>@ViewBag.Name</p> </div> </pre></div><p>效果</p><p><img src="https://images2017.cnblogs.com/blog/374636/201712/374636-20171208152208359-1020384596.png" alt=""></p><p> </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进行注册 </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;"><summary></span> <span style="color: #808080;">///</span><span style="color: #008000;"> 获取容器-注册依赖关系 </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></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;"><summary></span> <span style="color: #808080;">///</span><span style="color: #008000;"> 加载容器 </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></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;"><summary></span> <span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入 </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></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<IUserService, UserService><span style="color: #000000;">(); </span><span style="color: #008000;">//</span><span style="color: #008000;">container.RegisterType<IUserService, UserService>(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<IUserService>(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> 修改上面的方法,将注册放到配置文件中</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;"><summary></span> <span style="color: #808080;">///</span><span style="color: #008000;"> 实施依赖注入 </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="container"></param></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> 提示:自定义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><configuration> <configSections> <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>/> <!-- 一般将unity节点放到文件末尾 --> </configSections> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>> <<span style="color: #0000ff;">namespace</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /> <assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /> <containers> <container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>> <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>> <lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /> </register> <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>/> </container> </containers> </unity></configuration></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> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>> <assembly name=<span style="color: #800000;">"</span><span style="color: #800000;">Business</span><span style="color: #800000;">"</span> /> <containers> <container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>> <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>> <lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /> </register> <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>/> </container> </containers> </unity></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> <unity xmlns=<span style="color: #800000;">"</span><span style="color: #800000;">http://schemas.microsoft.com/practices/2010/unity</span><span style="color: #800000;">"</span>> <containers> <container name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultContainer</span><span style="color: #800000;">"</span>> <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>> <lifetime type=<span style="color: #800000;">"</span><span style="color: #800000;">singleton</span><span style="color: #800000;">"</span> /> </register> <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>/> </container> </containers> </unity></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> 源码下载:https://gitee.com/zmsofts/XinCunShanNianDaiMa/blob/master/IocDemo.rar</p><p> </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> </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>

浙公网安备 33010602011771号