首页 > 代码库 > .NET MVC4 实训记录之一(引入Unity3.0 Ioc框架)
.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引入完成。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。