几个步骤轻松搞定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微服务系列–注 ...
随机推荐
- *HDU2147 博弈
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/10000 K (Java/Others)Total ...
- iOS开发之AFNetworking 3.0.4使用
昨天使用Cocoapods导入AFN做POST的时候,导入的最新版的3.0.4,突然发现找不到AFHTTPRequestOperationManager了...上github上一看,发现没有这个了.刚 ...
- laravel中如何防止直接访问.env文件
.env文件含有数据库账号密码等敏感数据,在laravel5.2中,在本地访问127.0.0.1/laravel/.env可直接访问到.env. 为避免.env被直接访问,可使用重定向,方法如下: 在 ...
- JQuery的父、子、兄弟节点查找方法
jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限于父元素 jQuery.children ...
- centos 格式化分区
#格式化U盘,成fat32 fdisk -l #获取U盘设备信息 #Disk /dev/sdc: 16.0 GB, 16025387008 bytes, 31299584 sectors#Units ...
- VS 默认开发环境如何更改
话不多说,直接上图
- 同一个页面多个page之间的切换
今天接触了JQ Mobile以下是本小白的理解(不怕大家笑话): 创建移动 web 应用程序的框架:适用于所有流行的智能手机和平板电脑: 将“写得更少.做得更多”这一理念提升到了新的层次:它会自动为网 ...
- Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)
IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...
- 自己动手写游戏:Flappy Bird
START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了 ...
- SQL Server 执行计划缓存
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/内存池/缓冲区 概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之 ...