在asp.net页面上得到Castle容器的实例

时间:2022-04-23
本文章向大家介绍在asp.net页面上得到Castle容器的实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在项目中使用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框架也是这样用的,自己就不要这么麻烦了,可以将这个写在页面和控件的基类中。