几个步骤轻松搞定ASP.NET 依赖注入。
http://www.it165.net/pro/html/201407/17685.html
我在网上看到了这篇文章,这边文章主要说的方法就是通过读取配置文件来解决依赖注入的问题。但是每次新建一个依赖注入的类,就要改一下配置文件,这显然不符合设计模式中的开闭原则。先来看看一般的解法。
//var container = new UnityContainer();
//container.RegisterType(typeof(IRegisterService), typeof(RegisterService));
//IRegisterService ins = (IRegisterService)container.Resolve(typeof(IRegisterService));
于是我们想到,只要把其中的类替换成泛型类就行了,那这个怎么写呢?很简单,新建一个公共静态的方法,然后用的时候调用这个方法就行了。下面是公共方法我写的,于是大家会想看看区别,我给 大家看看调用CONFIG文件和直接用泛型的区别,注意多个泛型类的写法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using Microsoft.Practices.Unity;
using System.Configuration;
using System.Xml;
using Microsoft.Practices.Unity.Configuration; namespace MapleStory2.Common
{
public class UnityTool<IClass> where IClass:class
{ /// <summary>
/// 设置依赖注入映射,通过web.config映射
/// </summary>
public static IClass UnityConfiguration()
{ IUnityContainer container=new UnityContainer(); Configuration config = DBUtil.GetConfig(System.Web.HttpContext.Current.Server.MapPath("~/MapleStory2.Common/unity.config")); UnityConfigurationSection seciton = (UnityConfigurationSection)config.GetSection("unity"); container.LoadConfiguration(seciton, "FirstClass"); IClass classInfo= container.Resolve<IClass>("ec");
return classInfo; } } /// <summary>
/// 不通过config文件映射
/// </summary>
/// <typeparam name="IClass">接口类</typeparam>
/// <typeparam name="cbClass">接口实现类</typeparam>
public class UnityHelper<IClass, cbClass>
where IClass : class
where cbClass : class
{
public static IClass UnityUnitTest()
{
var container = new UnityContainer();
container.RegisterType(typeof(IClass), typeof(cbClass));
IClass ins = (IClass)container.Resolve(typeof(IClass)); return ins; } } }
好了,我只要在controller里面调用就行了,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Microsoft.Practices.Unity;
using MapleStory2.IDAL.Account;
using MapleStory2.Model;
using MapleStory2.Model.Models;
using MapleStory2.DAL.Account;
using MapleStory2.Common; namespace MapleStory2.Controllers
{
public class RegisterController : Controller
{ [Dependency]
public IRegisterService registerService { get; set; } //
// GET: /Register/ public ActionResult Index()
{ return View();
} [HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(UserQueryData user)
{
//依赖注入,详情:
//https://msdn.microsoft.com/en-us/library/ff650319.aspx
//var container = new UnityContainer();
//container.RegisterType(typeof(IRegisterService), typeof(RegisterService));
//IRegisterService ins = (IRegisterService)container.Resolve(typeof(IRegisterService)); //依赖注入公共类--依赖WEB.CONFIG文件
// registerService = UnityTool<IRegisterService>.UnityConfiguration(); //依赖注入公共类--不依靠WEB.CONFIG文件
registerService = UnityHelper<IRegisterService, RegisterService>.UnityUnitTest(); if (ModelState.IsValid)
{
bool flag = registerService.AddNormalUser(user); //添加普通用户
//int count = 0;
//using (maplestory2Context mc = new maplestory2Context())
//{
// string userId = Guid.NewGuid().ToString(); // //往用户表里插入数据
// mc.Users.Add(new User
// {
// ID = userId,
// UserName = user.UserName,
// Password = user.Password,
// NickName = user.UserName,
// RegDate = DateTime.Now,
// SortCode = 0
// }); // //count = mc.SaveChanges(); // //往用户详情表里插入数据
// mc.UserDetails.Add(new UserDetail()
// {
// DetailID = Guid.NewGuid().ToString(),
// DetailType = 0,
// BornLocation = user.BornLocation,
// UserID = userId,
// UserName = user.UserName // }); // count = mc.SaveChanges();
//} //if (count > 0)
//{
// ModelState.Clear();
// user = null;
// ViewBag.Message = "注册成功";
//} if (flag)
{
ModelState.Clear();
user = null;
ViewBag.Message = "注册成功";
}
} return View("Index");
} }
}
就这么简单,但是难以琢磨,对了,请教大家一个问题,怎么在找到一个文件在程序集中的物理地址呢?

比如这个unity.config文件,不在网站里面而在code library 里面,我无法通过 Server.mappath或者Assembly 的方法去定位啊
几个步骤轻松搞定ASP.NET 依赖注入。的更多相关文章
- 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...
- 基于 CODING 轻松搞定持续集成
点击观看视频教程 带你一步一步搞定 CODING 持续集成 持续集成加速软件交付 持续集成这个概念是由 Grady Booch 在 1991 年首次提出,随后成为了 DevOps 的核心实践之一.持续 ...
- 分分钟轻松搞定IBM系列 RAID5搭建
分分钟轻松搞定IBM系列 RAID5搭建 按照 以下图片步骤一步步可轻松完成IBM服务器RAID1.5.10等的搭建. 此例是以RAID5为例,RAID1和10可举一反三.
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )
变量: 存储数据的容器 1.声明 var 2.作用域 全局变量. 局部变量. 闭包(相对的全局变量): 3.类型 a.基本类型(undefi ...
- Webcast / 技术小视频制作方法——自己动手录制video轻松搞定
Webcast / 技术小视频制作方法——自己动手录制video轻松搞定 http://blog.sina.com.cn/s/blog_67d387490100wdnh.html 最近申请加入MSP的 ...
- 【微服务】之二:从零开始,轻松搞定SpringCloud微服务系列--注册中心(一)
微服务体系,有效解决项目庞大.互相依赖的问题.目前SpringCloud体系有强大的一整套针对微服务的解决方案.本文中,重点对微服务体系中的服务发现注册中心进行详细说明.本篇中的注册中心,采用Netf ...
- 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心
在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...
- 从零开始,轻松搞定SpringCloud微服务系列
本系列博文目录 [微服务]之一:从零开始,轻松搞定SpringCloud微服务系列–开山篇(spring boot 小demo) [微服务]之二:从零开始,轻松搞定SpringCloud微服务系列–注 ...
随机推荐
- 搭建spark环境
1.wget http://www.apache.org/dyn/closer.cgi/spark/spark-1.2.0/spark-1.2.0-bin-hadoop2.4.tgz
- Oracle EBS - PO Approval
PO Approval Except Standard Flow: 1. Personal setting
- SQLPrompt 7.2发布
SQLPrompt 7.2发布 下载地址:http://www.red-gate.com/products/sql-development/sql-prompt/ 红门的热门产品SQLPrompt 发 ...
- Backbone源码分析(一)
距离上一篇博客有一段时间了,期间各种琐事萦绕.最主要的一件是,当我差不多将整个dojo核心源码看完,惊讶的发现dojo1.*的设计以是老态龙钟之象,而我沉溺在dojo中太久,已经不知道前端世界变成了什 ...
- NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装
一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经 ...
- C# Random生成多个不重复的随机数万能接口
C#,Radom.Next()提供了在一定范围生成一个随机数的方法,我现在有个业务场景是给其他部门推送一些数据供他们做抽样检查处理,假设我的数据库里面有N条数据,现在要定期给其随机推送数据,我需要先拿 ...
- 【java并发编程实战】-----线程基本概念
学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的"系统",需要自己好好总结.整理才能征服它.希望同仁们一起来学习 ...
- Got the Best Employee of the year 2015 Star Award
Got "The Best Employee of the year 2015 Star Award" from the company, thanks to all that h ...
- Windows Azure Storage (20) 使用Azure File实现共享文件夹
<Windows Azure Platform 系列文章目录> Update 2016-4-14.在Azure VM配置FTP和IIS,请参考: http://blogs.iis.net/ ...
- 2013 duilib入门简明教程 -- 界面设计器 DuiDesigner (10)
上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便. 所以这一章准备介绍duilib的UI设计器,由于这个设计器很 ...