ASP.NET 依赖注入。

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

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

1
2
3
//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 的方法去定位啊


作者: KMSFan 
出处:http://www.cnblogs.com/kmsfan

ASP.NET 依赖注入。的更多相关文章

  1. ASP .NET依赖注入理解

    ASP .NET依赖注入理解[转]:  https://www.cnblogs.com/wzk153/p/10892444.html

  2. Asp.NetCore依赖注入和管道方式的异常处理及日志记录

    前言     在业务系统,异常处理是所有开发人员必须面对的问题,在一定程度上,异常处理的能力反映出开发者对业务的驾驭水平:本章将着重介绍如何在 WebApi 程序中对异常进行捕获,然后利用 Nlog ...

  3. C#反射与特性(六):设计一个仿ASP.NETCore依赖注入Web

    目录 1,编写依赖注入框架 1.1 路由索引 1.2 依赖实例化 1.3 实例化类型.依赖注入.调用方法 2,编写控制器和参数类型 2.1 编写类型 2.2 实现控制器 3,实现低配山寨 ASP.NE ...

  4. 几个步骤轻松搞定ASP.NET 依赖注入。

    http://www.it165.net/pro/html/201407/17685.html 我在网上看到了这篇文章,这边文章主要说的方法就是通过读取配置文件来解决依赖注入的问题.但是每次新建一个依 ...

  5. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  6. ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...

  7. ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起

    我们一致在说 ASP.NET Core广泛地使用到了依赖注入,通过前面两个系列的介绍,相信读者朋友已经体会到了这一点.由于前面两章已经涵盖了依赖注入在管道构建过程中以及管道在处理请求过程的应用,但是内 ...

  8. ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器

    原文: Dependency Injection and Controllers 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core MVC 控制器应通过 ...

  9. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

随机推荐

  1. 矩阵求逆c++达到

    高斯消元法能够用来找出一个可逆矩阵的逆矩阵.设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来.将一个N * N单位矩阵 放在A 的右手边,形成一个N * 2N的分块矩阵B = [A,I] ...

  2. 【转】MAT(Memory Analyzer Tool)工具入门介绍

    1.MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗 ...

  3. HDU 1710-Binary Tree Traversals(二进制重建)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  4. linux软与硬接线连接

    1.Linux链接概念 Linux链接分两种.一种被称为硬链接(Hard Link),还有一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索 ...

  5. [Java Web]Struts2加起来(一个)

    Struts2环境配置 进口Struts2的需要jar包 在WEB-INF/classes(src)文件夹下创建struts.xml文件 在web.xml文件里加入Struts过滤器信息 经常使用配置 ...

  6. HDU 3065 病毒在继续 (AC自己主动机)

    中国标题不解释 Sample Input 3 AA BB CC ooxxCC%dAAAoen....END   Sample Output AA: 2 CC: 1 输出病毒出现的次数! #includ ...

  7. web前端利用HSTS(新的Web安全协议HTTP Strict Transport Security)漏洞的超级Cookie(HSTS Super Cookie)

    web前端如果想实现cookie跨站点,跨浏览器,清除浏览器cookie该cookie也不会被删除这似乎有点难,下面的教程让你完全摆脱document.cookie 1.服务器端设置HSTS 如PHP ...

  8. iOS kvc

    kvc在我的脑海里用来更改属性的实例变量值. 今天,他们遇到了kvc第二次去学习它,在网上看了很多博客,这似乎不符合我的口味,为了提取一些以下的.总结自己的. http://www.cnblogs.c ...

  9. 云盘+Git GUI云盘文件版本控制

    以下介绍操作细节 1.先下载Git GUI 下载地址:http://msysgit.github.io/ 再下载百度云网盘 下载地址:http://pan.baidu.com 接下来就是安装这两个软件 ...

  10. Visual Studio Team Services使用教程--默认团队checkin权限修改