几个步骤轻松搞定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 的方法去定位啊

时间: 2024-10-01 03:58:16

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

Photoshop大片后期终极宝典 八个步骤轻松搞定

教程只有一些过程图,很多调色的参数都没有.不过作者的思路非常好,用选区来控制调色范围,把一些不太好看的部分单独调漂亮教程只有一些过程图,很多调色的参数都没有.不过作者的思路非常好,用选区来控制调色范围,把一些不太好看的部分单独调漂亮. 教程只有一些过程图,很多调色的参数都没有.不过作者的思路非常好,用选区来控制调色范围,把一些不太好看的部分单独调漂亮教程只有一些过程图,很多调色的参数都没有.不过作者的思路非常好,用选区来控制调色范围,把一些不太好看的部分单独调漂亮. http://www.mer

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

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释 演示样例源代码: https://github.com/junkchen/BleLib/tree/master/sample Android ble4.0开发基础篇:http://blog.csdn.net/kjunchen/article/details/50339549 BleLib是An

如何将CAD图纸转换成彩色,只需几步即可轻松搞定!

如何将CAD图纸转换成彩色,只需几步即可轻松搞定!在日常的工作中,建筑设计师们在编辑器完图纸后,基本图纸都是黑白的,这样不利用我们更好的进行查看,那就需要将CAD图纸的颜色进行转换,如何将CAD图纸转换成彩色,具体要怎么操作了?本篇教程就教教大家在迅捷CAD转换器中如何将CAD图纸转换成彩色只需几步的具体操作方法,想要了解的朋友就感觉来看看吧! 第一步:打开常用电脑,在电脑桌面中任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CAD转换器,然后鼠标点击进入官网,点击 下载安装最新版本的CAD转换

PPT如何压缩大小?只需两招轻松搞定

在工作中我们接触比较多的就是PPT了,自己美滋滋的做了一个很满意的PPT在保存的时候发现,这个PPT文件太大了,这样的话在发送的时候就很不方便了,可是自己辛苦半天的成果,不能这么浪费了,那么该怎么办呢?其实是可以对PPT压缩的,这样的话就能够使用啦,那么PPT如何踏实大小?压缩了的PPT大小又不影响美观和具体的效果呢?想知道的话就一起来看看下面的文章吧,只需两招轻松搞定哦.方法一:PPT直接压缩操作步骤:一.首先是打开我们需要压缩的PPT文件,单击"文件"按钮.二.打开之后,我们点击&

怎么把PDF文件转换成Word?三招教你轻松搞定

PDF和Word两个文件之间,相互转换是在我们的工作中经常需要用到的,也曾经是很多职场新人的困扰,很多人都想知道怎么把PDF文件转换成Word?今天呢就来给大家分享三个简单的方法,只需三招就能轻松搞定. 方法1:打开方式为Word 怎么把PDF文件转换成Word?这个方法其实很简单的,只需要点击PDF文档,选择打开方式为Word,利用Word打开即可.步骤:点击PDF文件--右击鼠标--选择[打开方式]--点击Word:方法2:专业转换器 如果在觉得通过Word打开方式不太好用的话,可以使用专业

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

分分钟轻松搞定IBM系列 RAID5搭建 按照 以下图片步骤一步步可轻松完成IBM服务器RAID1.5.10等的搭建. 此例是以RAID5为例,RAID1和10可举一反三. 原文地址:https://www.cnblogs.com/kezi/p/11621258.html

轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)

hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解析),但吃的时候还是一口一口的吃(JS逐行执行)! OK,解决下面五个问题,JS预解析就算过了~~(前提:对JS变量作用域有清晰理解) 一.JS预解析是什么? 其实就是对程序要用到的材料(变量,函数)给一个初始值,并存到一个表中(我自己虚构的),当程序运行到那一行时,就来这个表看有没有初始值,没有就

六步轻松搞定,自建APP不求人

随着互联网浪潮的席卷,越来越多的传统企业开始涉足互联网领域.无论是出于企业转型升级考虑,还是受市场整体环境的驱动,很多企业凭借某一领域的绝对优势,浩浩荡荡进军移动互联网领域,通过自建APP的方式,推出属于自己的移动端应用产品. 不少企业在探寻如何自建APP的过程中,遇到的第一个决策性难题就是:自建APP开发团队还是外包APP建设?其实对于大多数企业而言,由于企业内部组织架构设置问题,尚没有配备完善的自建APP开发团队,同时财政预算有限,难以承担整体自建APP工作.对于这类中小型企业而言,如何能够

centos下yum安装lamp和lnmp轻松搞定

centos下yum安装lamp和lnmp轻松搞定,到底多轻松你看就知道了,妈妈再也不担心不会装lamp了. 很辛苦整理的安装方法,会持续更新下去.凡无法安装的在评论里贴出问题来,会尽快解决.共同维护一个可用yum可用更新. 软件列表:php5.4 apache2.2 mysql5.5 nginx1.8 centos6.x rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ng