在项目中使用Castle IOC容器,Asp.net程序中如何得到Castle容器内。

可以如下实现:

1、Gloabal实现接口IContainerAccessor

public class Global : System.Web.HttpApplication, IContainerAccessor
      {

/// <summary>
         /// 必需的设计器变量。
         /// </summary>
          private System.ComponentModel.IContainer components = null;
          private static WindsorContainer container;
          
         public Global()
         {
              InitializeComponent();
         }

protected void Application_Start(Object sender, EventArgs e)
         {
              container = new MyContainer(new XmlInterpreter("app_config.xml"));
         }

protected void Session_Start(Object sender, EventArgs e)
         {

}

……
    protected void Application_End(Object sender, EventArgs e)
    {
              container.Dispose();
    }

#region IContainerAccessor implementation

public IWindsorContainer Container
         {
              get { return container; }
         }
             
}

2、使用如下类来获取容器实例,这段代码来自Castle.MVC
     /// <summary>
     /// Uses the HttpContext and the <see cref="IContainerAccessor"/> 
     /// to access the container instance.
     /// </summary>
     public abstract class ContainerWebAccessorUtil
     {

/// <summary>
         /// 从application中获取一个容器实例
         /// </summary>
         /// <returns>返回一个 IWindsorContainer</returns>
         public static IWindsorContainer ObtainContainer()
         {

IContainerAccessor containerAccessor =

HttpContext.Current.ApplicationInstance as IContainerAccessor;  
              if (containerAccessor == null)
              {
                   throw new ApplicationException("你必须在HttpApplication中实现接口 IContainerAccessor 暴露容器的属性”);

}

IWindsorContainer container = containerAccessor.Container;  
              if (container == null)
              {
                   throw new ApplicationException("HttpApplication 得不到容器的实例");
              }
              return container;

}
     }

3、在具体的用户控件,页面的后置代码中通过ContainerWebAccessorUtil. ObtainContainer()获取容器实例。当然如果使用Castle.MVC,MVC框架也是这样用的,自己就不要这么麻烦了,可以将这个写在页面和控件的基类中。

在asp.net页面上得到Castle容器的实例的更多相关文章

  1. asp.net 页面上的点击事件

    asp.net 页面上 服务器端控件Button 有两个click事件如 <asp:Button ID="Button1" runat="server" ...

  2. 在asp.net页面上按回车会触发Imagebutton控件的Click事件

    原文:在asp.net页面上按回车会触发Imagebutton控件的Click事件 问题: 用asp.net做的aspx页面,无论是否有文本框.下拉框.复选框……获得焦点,只要在当前页面上按一下回车就 ...

  3. asp.net 页面上传文件控件后台代码Request.Files获取不到

    今天开发中遇到页面文件上传控件选择了文件,而后台Request.Files.Count取值为0,之前开发中遇到过几次,老是忘掉,今天记下来. html: <input type="fi ...

  4. ASP.NET页面上传文件时提示文件大小超过请求解决方法

    在webconfig中节点 <system.web> </system.web> 下加入以下代码:maxRequestLength为限制上传文件大小,executionTime ...

  5. ASP.NET页面支持的指令

    页面的处理指令 页面指令的处理用于配置执行该页面的运行时环境.在ASP.NET中,指令可以位于页面的任何位置,但良好且常见的习惯是将其置于文件的开始部分.除此,页面指令的名称是不区分大小写的,且指令的 ...

  6. asp.net清空页面上的所有TextBox

    Asp.net中一次性清空页面上的所有TextBox中的内容,由于TextBox在客户端以<input type=”text”>形式来呈现的,因此解决方案有客户端和服务器端两种方式,服务器 ...

  7. ASP.NET Web API 帮助(help)页面上没有 Test API按钮的解决方法

    参与一个web API项目时发现它的help页面特别好用,不仅可以根据webapi的方法和注释自动生成帮助文档以方便查阅,还可以在这个页面上测试webapi方法.于是在自己新建项目时也打算将这个hel ...

  8. [AaronYang原创] 大话ASP.NET MVC3+ (C#与DOM与JS页面上的很炫的技巧)

    案例一:比如我要传递一个新闻标题和新闻内容 存储到数据库去 1.最简单的通用Url公式就是 function getUrl() { var d = $("#表单ID").seria ...

  9. ASP.NET Core - 利用Windsor Castle实现通用注册

    问题引入 在ASP.NET Core - 依赖注入这篇文章里面,我们知道了如何利用ASP.NET Core原生的容器来实现依赖注入的,那我们为什么要替换掉默认的 IoC容器呢?从ASP.NET Cor ...

随机推荐

  1. Android实现换肤功能(一)

    上周有个朋友给建议说讲讲换肤吧,真巧这周公司的工作安排也有这个需求,换的地方之多之繁,让人伤神死了.正所谓磨刀不误砍柴工,先磨下刀,抽出一个工具类,写了个关于换肤的简单demo. Android中换肤 ...

  2. linux c++ 文件获取md5

    当前在linux系统下,shell命令可以获取md5值,如下: 如果进行c++编程,在代码里执行shell命令可以获得,但是很不雅观,特别是了解了system或者popen函数的机制之后.现在介绍使用 ...

  3. HTTP协议—— 简单认识TCP/IP协议(转载)

    原文地址(http://www.cnblogs.com/roverliang/p/5176456.html) 1.什么是TCP/IP  如果要了解一个人,可以从他归属的集体聊起来.我们的HTTP协议就 ...

  4. ubuntu下配置.net core运行环境

    Ubuntu 16.4执行: sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotne ...

  5. MQTT 学习笔记

    MQTT特点 MQTT协议是为大量计算能力有限,且工作在低带宽.不可靠的网络的远程传感器和控制设备通讯而设计的协议. 1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合 2.对负载内容 ...

  6. 定时检测Memcached进程是否存在,若不存在自动启动它

    由于一台WEB服务器的Memcached死掉而导致在访问网站的某些页面时候打不开.下面脚本会自动检测Memcached的进程,如果挂掉则自动重启Memcached服务. vim memcached_c ...

  7. 由上而下层层剖析细说PCI+ExpresS+11新版精髓

    https://wenku.baidu.com/view/9a16c41fa300a6c30c229f87.html

  8. 1.Vector(向量容器)

    一.概述 Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入 ...

  9. redis源码学习_整数集合

    redis里面的整数集合保存的都是整数,有int_16.int_32和int_64这3种类型,和C++中的set容器差不多. 同时具备如下特点: 1.set里面的数不重复,均为唯一. 2.set里面的 ...

  10. MySQL触发器更新本表数据异常:Can't update table 'tbl' in stored function/trigger because it

    MySQL触发器更新本表数据异常:Can't update table 'tbl' in stored function/trigger because it 博客分类: 数据库 MySQLJava ...