本来简单介绍了Autofac在Asp.Net Web Forms中的应用,后来又添加了mvc、控制台应用程序中使用Autofac,详情请看源码

ASP.NET Web Forms使用Autofac,至少需要一下步骤:

1,引用Autofac程序集。

2,添加Autofac Web Modules 到 Web.config。

3,在Global.asax中实现IContainerProviderAccessor接口。

我们创建一个ASP.NET Web Forms项目,命名为WebFormStudy。

添加引用

添加引用的最简单方式就是用NuGet,右击WebFormStudy项目下的References,选择Manage NuGet Packages,如下图:

在Search Online中输入auto.web字样,Autofac WebForms Intergration 就搜索到了,点击Install。

安装完后,我们就可以在References中看到添加了Autofac.dll和Autofac.Integration.Web.dll,如下图:

添加ModulesWeb.config

Autofac管理组件的生命周期并且添加依赖注入到Asp.net管道是通过IHttpModule实现的(注:在HttpApplication 初始化过程中,会根据配置文件加载并初始化相应的实现了IHttpModule接口的HttpModule 对象。对于HttpApplication来说,在它处理HTTP 请求的不同阶段会触发不同的事件,而HttpModule 的意义在于通过注册HttpApplication 的相应的事件,将所需的操作注入整个HTTP 请求的处理流程。ASP.NET 的很多功能,比如身份验证、授权、缓存等,都是通过相应的HttpModule 实现的。摘自:Asp.net Mvc4框架揭秘),你需要在web.config中配置这些Modules。

幸运的是,如果通过NuGet添加Autofac程序集,在安装的时候自动在Web.config中配置了相应的Modules,如下图:

Global.aszx中实现IContainerProviderAccessor接口

依赖注入模块需要HttpApplication实例实现IContainerProviderAccessor接口。一个完整的全局Application类如下所示:

public class Global : HttpApplication,IContainerProviderAccessor

{

static IContainerProvider _containerProvider;

public IContainerProvider ContainerProvider

{

get { return _containerProvider; }

}

void Application_Start(object sender, EventArgs e)

{

// Code that runs on application startup

RouteConfig.RegisterRoutes(RouteTable.Routes);

BundleConfig.RegisterBundles(BundleTable.Bundles);

#region 我们添加的代码

var builder = new ContainerBuilder();

//注册将被通过反射创建的组件

builder.RegisterType<DatabaseManager>();

builder.RegisterType<OracleDatabase>().As<IDatabase>();

_containerProvider = new ContainerProvider(builder.Build());

#endregion

}

}

DatabaseManager、OracleDatabase等类代码:

 public interface IDatabase
{
string Name { get; } string Select(string commandText); string Insert(string commandText); string Update(string commandText); string Delete(string commandText);
}

IDatabase

 public class DatabaseManager
{
IDatabase _database; public DatabaseManager(IDatabase database)
{
_database = database;
} public string Search(string commandText)
{
return _database.Select(commandText);
} public string Add(string commandText)
{
return _database.Insert(commandText);
} public string Save(string commandText)
{
return _database.Update(commandText);
} public string Remove(string commandText)
{
return _database.Delete(commandText);
} }

DatabaseManager

 public class SqlDatabase : IDatabase
{
public string Name
{
get { return "sqlserver"; }
} public string Select(string commandText)
{
return string.Format("'{0}' is a query sql in {1}!", commandText, Name);
} public string Insert(string commandText)
{
return string.Format("'{0}' is a insert sql in {1}!", commandText, Name);
} public string Update(string commandText)
{
return string.Format("'{0}' is a update sql in {1}!", commandText, Name);
} public string Delete(string commandText)
{
return string.Format("'{0}' is a delete sql in {1}!", commandText, Name);
}
}

SqlDatabase

    public class OracleDatabase : IDatabase
{
public string Name
{
get { return "oracle"; }
} public string Select(string commandText)
{
return string.Format("'{0}' is a query sql in {1}!", commandText, Name);
} public string Insert(string commandText)
{
return string.Format("'{0}' is a insert sql in {1}!", commandText, Name);
} public string Update(string commandText)
{
return string.Format("'{0}' is a update sql in {1}!", commandText, Name);
} public string Delete(string commandText)
{
return string.Format("'{0}' is a delete sql in {1}!", commandText, Name);
}
}

OracleDatabase

运行下,糟糕,报错了,如下图:

没关系,注释如下配置信息:

再次运行,ok,如下图:

 源码地址

参考引用: http://www.cnblogs.com/liping13599168/archive/2011/07/16/2108209.html

Asp.Net Web Forms/MVC/Console App中使用Autofac的更多相关文章

  1. 如何在 ASP.Net Web Forms 中使用依赖注入

    依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模 ...

  2. 【翻译】使用Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定

    原文地址:http://www.dotnetjalps.com/2013/05/Simple-data-binding-with-Knockout-Web-API-and-ASP-Net-Web-Fo ...

  3. Asp.Net学习进度备忘(第一步:ASP.NET Web Forms)

    书签:“Web Pages”和“MVC”跳过:另外跳过的内容有待跟进 __________________ 学习资源:W3School. _________________ 跳过的内容: 1.ASP. ...

  4. ASP.NET Web Forms的改进

    虽然ASP.NET Web Forms不是vNext计划的一部分,但它并没有被忽视.作为Visual Studio 2013 Update 2的一部分,它重新开始支持新工具.EF集成和Roslyn. ...

  5. ASP.NET Web Forms 4.5的新特性

    作者:Parry出处:http://www.cnblogs.com/parry/ 一.强类型数据控件 在出现强类型数据控件前,我们绑定数据控件时,前台一般使用Eval或者DataBinder.Eval ...

  6. Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定

    使用Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定   原文地址:http://www.dotnetjalps.com/2013/05/Simple-da ...

  7. ASP.NET Web Forms 的 DI 應用範例

    跟 ASP.NET MVC 与 Web API 比起来,在 Web Forms 应用程式中使用 Dependency Injection 要来的麻烦些.这里用一个范例来说明如何注入相依物件至 Web ...

  8. [转]Bootstrap 3.0.0 with ASP.NET Web Forms – Step by Step – Without NuGet Package

    本文转自:http://www.mytecbits.com/microsoft/dot-net/bootstrap-3-0-0-with-asp-net-web-forms In my earlier ...

  9. Using Friendly URLs in ASP.NET Web Forms

    Introduction Websites often need to generate SEO friendly URLs. In ASP.NET Web Forms applications, a ...

随机推荐

  1. 针对XX系统的可用性和易用性构想

    可用性是与系统故障有关的一个质量属性,是指系统正常运行的时间的比例,一般通过两次故障之间的时间长度或在系统崩溃情况下能恢复正常运行的速度来衡量,同时此概念涉及一个公式的计算,就是系统正常运行时间的百分 ...

  2. 算法与数据结构实验题 4.2 小 F 打怪

    ★实验任务 小 F 很爱打怪,今天因为系统 bug,他提前得知了 n 只怪的出现顺序以及击 倒每只怪得到的成就值 ai.设第一只怪出现的时间为第 1 秒,这个游戏每过 1 秒 钟出现一只新怪且没被击倒 ...

  3. 福大软工1816:Alpha(7/10)

    Alpha 冲刺 (7/10) 队名:Jarvis For Chat 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.完成 ...

  4. eg_1

    1. 编写一个程序,输出一个字符串中的大写英文字母个数,小写英文字母个数以及非英文字母个数. 第一种方法: public class Test { public static void main(St ...

  5. ubuntu中下载sublime相关问题

    1.SublimeText3的安装 在网上搜索了一些ubuntu下关于sublime-text-3安装的方法,在这里针对自己尝试的情况进行反馈: 方法一(未成功): 在终端输入以下代码: sudo a ...

  6. JTS空间分析工具包(GIS开源)学习 JAVA

    JST空间分析工具包是一套JAVA API,提供一系列的空间数据分析操作.最近开发项目刚好需要用到,上网搜资料也少,就自己写下来记录一下.C++版本的拓扑分析开源工具叫:geos:.NET版本的拓扑分 ...

  7. Unity3d学习日记(三)

      使用Application.LoadLevel(Application.loadedLevel);来重新加载游戏scene的方法已经过时了,我们可以使用SceneManager.LoadScene ...

  8. SQL SERVER技术内幕之7 透视与逆透视

    1.透视转换 透视数据(pivoting)是一种把数据从行的状态旋转为列的状态的处理,在这个过程中可能须要对值进行聚合. 每个透视转换将涉及三个逻辑处理阶段,每个阶段都有相关的元素:分组阶段处理相关的 ...

  9. PHP中Session和Cookie的探究

    一.Session (1)Session的由来以及介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”,生存时间为用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就 ...

  10. MyBatis原理系列

    原理分析之一:从JDBC到Mybatis 原理分析之二:框架整体设计 原理分析之三:初始化(配置文件读取和解析) 原理分析之四:一次SQL查询的源码分析