.NET MVC4 实训记录之一(引入Unity3.0 Ioc框架)

  一直在做维护项目,没有机会接触完整的架构,于是自学.NET MVC。自今日起,将自学的过程、遇到的问题以及解决方案记录下来。

  在WebApp项目中右键,使用NuGet引入Unity3.0。

  

  引入后项目目录下会自动生成一个Bootstrapper.cs文件。

  

  手动在WebApp根目录下创建IOC.config文件,用于配置IOC规则。(注意:之前看网上教程中的配置文件,<typeAliases></typeAliases>节点和<unity></unity>节点平级,但运行时总是异常,找不到IBaseService的定义。应该是没有找到自定义类型所在的程序集。我将<typeAliases></typeAliases>节点移到<unity></unity>的内部后,异常没有了。)

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <configSections>
 4     <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
 5              Microsoft.Practices.Unity.Configuration" />
 6   </configSections>
 7   
 8   <unity>
 9     <typeAliases>
10       <!--生命周期类型别名-->
11       <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
12       <typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity" />
13       <!--用户定义的类型别名-->
14       <typeAlias alias="IBaseService" type="Framework.Services.IBaseService, Framework.Services" />
15       <typeAlias alias="BaseService" type="Framework.Services.BaseService, Framework.Services" />      
16     </typeAliases>
17     <containers>
18       <container>
19         <types>
20       <!--默认为全生命周期,即为单例模式-->
21           <type type="IBaseService" mapTo="BaseService" />
22       </container>
23     </containers>
24   </unity>
25   <startup>
26     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
27   </startup>
28 </configuration>

  修改Bootstrapper.cs文件中的 BuildUnityContainer() 方法:

 1    private static IUnityContainer BuildUnityContainer()
 2     {
 3         var container = new UnityContainer();
 4 
 5         // register all your components with the container here
 6         // it is NOT necessary to register your controllers
 7 
 8         //获取IOC配置文件位置
 9         string configFile = System.Web.HttpRuntime.AppDomainAppPath + "IOC.config";
10         //设置扩展配置文件类型
11         var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };
12         //从config文件中读取配置信息
13         System.Configuration.Configuration config =
14             ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
15         //获取指定名称的配置节
16         UnityConfigurationSection configuration = (UnityConfigurationSection)config.GetSection("unity");        
17         //配置IOC容器
18         configuration.Configure(container);
19 
20         return container;
21     }

  在Globale.asax.cs 中初始化IOC容器:

 1         protected void Application_Start()
 2         {
 3             AreaRegistration.RegisterAllAreas();
 4 
 5             WebApiConfig.Register(GlobalConfiguration.Configuration);
 6             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7             RouteConfig.RegisterRoutes(RouteTable.Routes);
 8             BundleConfig.RegisterBundles(BundleTable.Bundles);
 9             AuthConfig.RegisterAuth();
10 
11             Bootstrapper.Initialise();  //初始化IOC容器
12         }

  在Controller中添加IBaseService类型的属性,加上[Dependency]标记,这样在该Controller中就可以直接使用。

  

  IOC框架Unity 3.0引入完成。

posted @ 2014-07-23 23:39  篱笆1006  阅读(413)  评论(0编辑  收藏  举报