http://www.it165.net/pro/html/201407/17685.html

我在网上看到了这篇文章,这边文章主要说的方法就是通过读取配置文件来解决依赖注入的问题。但是每次新建一个依赖注入的类,就要改一下配置文件,这显然不符合设计模式中的开闭原则。先来看看一般的解法。

  1. //var container = new UnityContainer();
  2. //container.RegisterType(typeof(IRegisterService), typeof(RegisterService));
  3. //IRegisterService ins = (IRegisterService)container.Resolve(typeof(IRegisterService));

  于是我们想到,只要把其中的类替换成泛型类就行了,那这个怎么写呢?很简单,新建一个公共静态的方法,然后用的时候调用这个方法就行了。下面是公共方法我写的,于是大家会想看看区别,我给 大家看看调用CONFIG文件和直接用泛型的区别,注意多个泛型类的写法:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Configuration;
  6. using Microsoft.Practices.Unity;
  7. using System.Configuration;
  8. using System.Xml;
  9. using Microsoft.Practices.Unity.Configuration;
  10.  
  11. namespace MapleStory2.Common
  12. {
  13. public class UnityTool<IClass> where IClass:class
  14. {
  15.  
  16. /// <summary>
  17. /// 设置依赖注入映射,通过web.config映射
  18. /// </summary>
  19. public static IClass UnityConfiguration()
  20. {
  21.  
  22. IUnityContainer container=new UnityContainer();
  23.  
  24. Configuration config = DBUtil.GetConfig(System.Web.HttpContext.Current.Server.MapPath("~/MapleStory2.Common/unity.config"));
  25.  
  26. UnityConfigurationSection seciton = (UnityConfigurationSection)config.GetSection("unity");
  27.  
  28. container.LoadConfiguration(seciton, "FirstClass");
  29.  
  30. IClass classInfo= container.Resolve<IClass>("ec");
  31. return classInfo;
  32.  
  33. }
  34.  
  35. }
  36.  
  37. /// <summary>
  38. /// 不通过config文件映射
  39. /// </summary>
  40. /// <typeparam name="IClass">接口类</typeparam>
  41. /// <typeparam name="cbClass">接口实现类</typeparam>
  42. public class UnityHelper<IClass, cbClass>
  43. where IClass : class
  44. where cbClass : class
  45. {
  46. public static IClass UnityUnitTest()
  47. {
  48. var container = new UnityContainer();
  49. container.RegisterType(typeof(IClass), typeof(cbClass));
  50. IClass ins = (IClass)container.Resolve(typeof(IClass));
  51.  
  52. return ins;
  53.  
  54. }
  55.  
  56. }
  57.  
  58. }

好了,我只要在controller里面调用就行了,

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using Microsoft.Practices.Unity;
  7. using MapleStory2.IDAL.Account;
  8. using MapleStory2.Model;
  9. using MapleStory2.Model.Models;
  10. using MapleStory2.DAL.Account;
  11. using MapleStory2.Common;
  12.  
  13. namespace MapleStory2.Controllers
  14. {
  15. public class RegisterController : Controller
  16. {
  17.  
  18. [Dependency]
  19. public IRegisterService registerService { get; set; }
  20.  
  21. //
  22. // GET: /Register/
  23.  
  24. public ActionResult Index()
  25. {
  26.  
  27. return View();
  28. }
  29.  
  30. [HttpPost]
  31. [ValidateAntiForgeryToken]
  32. public ActionResult Register(UserQueryData user)
  33. {
  34. //依赖注入,详情:
  35. //https://msdn.microsoft.com/en-us/library/ff650319.aspx
  36. //var container = new UnityContainer();
  37. //container.RegisterType(typeof(IRegisterService), typeof(RegisterService));
  38. //IRegisterService ins = (IRegisterService)container.Resolve(typeof(IRegisterService));
  39.  
  40. //依赖注入公共类--依赖WEB.CONFIG文件
  41. // registerService = UnityTool<IRegisterService>.UnityConfiguration();
  42.  
  43. //依赖注入公共类--不依靠WEB.CONFIG文件
  44. registerService = UnityHelper<IRegisterService, RegisterService>.UnityUnitTest();
  45.  
  46. if (ModelState.IsValid)
  47. {
  48. bool flag = registerService.AddNormalUser(user); //添加普通用户
  49. //int count = 0;
  50. //using (maplestory2Context mc = new maplestory2Context())
  51. //{
  52. // string userId = Guid.NewGuid().ToString();
  53.  
  54. // //往用户表里插入数据
  55. // mc.Users.Add(new User
  56. // {
  57. // ID = userId,
  58. // UserName = user.UserName,
  59. // Password = user.Password,
  60. // NickName = user.UserName,
  61. // RegDate = DateTime.Now,
  62. // SortCode = 0
  63. // });
  64.  
  65. // //count = mc.SaveChanges();
  66.  
  67. // //往用户详情表里插入数据
  68. // mc.UserDetails.Add(new UserDetail()
  69. // {
  70. // DetailID = Guid.NewGuid().ToString(),
  71. // DetailType = 0,
  72. // BornLocation = user.BornLocation,
  73. // UserID = userId,
  74. // UserName = user.UserName
  75.  
  76. // });
  77.  
  78. // count = mc.SaveChanges();
  79. //}
  80.  
  81. //if (count > 0)
  82. //{
  83. // ModelState.Clear();
  84. // user = null;
  85. // ViewBag.Message = "注册成功";
  86. //}
  87.  
  88. if (flag)
  89. {
  90. ModelState.Clear();
  91. user = null;
  92. ViewBag.Message = "注册成功";
  93. }
  94. }
  95.  
  96. return View("Index");
  97. }
  98.  
  99. }
  100. }

就这么简单,但是难以琢磨,对了,请教大家一个问题,怎么在找到一个文件在程序集中的物理地址呢?

比如这个unity.config文件,不在网站里面而在code library 里面,我无法通过 Server.mappath或者Assembly 的方法去定位啊

几个步骤轻松搞定ASP.NET 依赖注入。的更多相关文章

  1. 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...

  2. 基于 CODING 轻松搞定持续集成

    点击观看视频教程 带你一步一步搞定 CODING 持续集成 持续集成加速软件交付 持续集成这个概念是由 Grady Booch 在 1991 年首次提出,随后成为了 DevOps 的核心实践之一.持续 ...

  3. 分分钟轻松搞定IBM系列 RAID5搭建

    分分钟轻松搞定IBM系列 RAID5搭建 按照 以下图片步骤一步步可轻松完成IBM服务器RAID1.5.10等的搭建. 此例是以RAID5为例,RAID1和10可举一反三.

  4. 【转】轻松搞定FTP之FlashFxp全攻略

    转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...

  5. 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )

    变量:  存储数据的容器     1.声明        var   2.作用域       全局变量. 局部变量. 闭包(相对的全局变量):   3.类型         a.基本类型(undefi ...

  6. Webcast / 技术小视频制作方法——自己动手录制video轻松搞定

    Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...

  7. 【微服务】之二:从零开始,轻松搞定SpringCloud微服务系列--注册中心(一)

    微服务体系,有效解决项目庞大.互相依赖的问题.目前SpringCloud体系有强大的一整套针对微服务的解决方案.本文中,重点对微服务体系中的服务发现注册中心进行详细说明.本篇中的注册中心,采用Netf ...

  8. 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心

    在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...

  9. 从零开始,轻松搞定SpringCloud微服务系列

    本系列博文目录 [微服务]之一:从零开始,轻松搞定SpringCloud微服务系列–开山篇(spring boot 小demo) [微服务]之二:从零开始,轻松搞定SpringCloud微服务系列–注 ...

随机推荐

  1. 猥琐的wordpress后门分享

    https://www.t00ls.net/thread-37312-1-1.html 一个可以自动调用管理员帐号登录wordpress后台的方法. <?php require('../../. ...

  2. Kafka设计解析(二)- Kafka High Availability (上)

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/04/24/KafkaColumn2 摘要 Kafka在0.8以前的版本中,并不提供High Av ...

  3. 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I

    题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/G 这是一个01背包的模板题 AC代码: #include<stdio.h&g ...

  4. 减小ipa体积之删除frameWork中无用mach-O文件

    最近项目末期, 我们团队为了ipa的大小使用不少的体积减小的方法, 除了一些常规的方法之外, 我分享一下自己研究出来的新思路. 首先我们来简单的介绍一下mach-O. 什么是mach-O? Mach- ...

  5. SSRS(rdl报表)分页显示表头和对表头的冻结处理

    基础环境 最近在公司做西门子某系统的二次开发,需要用到SQLServer Reporting Services(SSRS).我们用的SQL版本是SQLServer 2008 R2:在设计报表时,表格用 ...

  6. 一个Java程序员的实习总结(2)

    在今天的总结里,主要讲述第二.三周这半个月的培训情况,并且穿插讲讲我对实习和见习的看法,有需要有兴趣的童鞋可以看看. 半个月的见习 其实我更愿意把实习和见习分开讲,实习指的是还没签三方或者直接就是大三 ...

  7. CLR via C# 学习计划

    本书是学习c#的人必读书,计划今年完成,读透. 书是在亚马逊买的,虽然有点小贵,但是为了情怀,咬咬牙买了. 需要学习的: CLR基础 (CH1-CH3) 设计类型 (CH4-CH13) 基本类型 (C ...

  8. Ubuntu安装Python2.7,nodejs

    安装Python2.7 sudo add-apt-repository ppa:fkrull/deadsnakes-python2.7sudo apt-get update sudo apt-get ...

  9. LINUX 下安装一些东西,PHP Apach SSL 等

    首先下载apache sourcecode:http://www.apache.org/dyn/closer.cgi configure: error: Cannot find ldap librar ...

  10. Android开发学习之路-Android6.0运行时权限

    在Android6.0以后开始,对于部分敏感的“危险”权限,需要在应用运行时向用户申请,只有用户允许的情况下这个权限才会被授予给应用.这对于用户来说,无疑是一个提升安全性的做法.那么对于开发者,应该怎 ...