Asp.Net Web Forms/MVC/Console App中使用Autofac

本来简单介绍了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

时间: 2024-10-05 06:24:35

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

ASP.NET Web Forms 4.5的新特性

作者:Parry出处:http://www.cnblogs.com/parry/ 一.强类型数据控件 在出现强类型数据控件前,我们绑定数据控件时,前台一般使用Eval或者DataBinder.Eval(Container.DataItem,"FieldName")的形式. 1 <%# DataBinder.Eval(Container.DataItem,"FieldName") %>2 <%# Eval("FieldName")

ASP.NET Web Forms 的 DI 應用範例

跟 ASP.NET MVC 与 Web API 比起来,在 Web Forms 应用程式中使用 Dependency Injection 要来的麻烦些.这里用一个范例来说明如何注入相依物件至 Web Forms 的 ASPX 页面. 使用的开发工具与类别库: Visual Studio 2013 .NET Framework 4.5 Unity 3.5.x 问题描述 基于测试或其他原因,希望 ASPX 网页只依赖特定服务的介面,而不要依赖具象类别. 假设首页 Default.aspx 需要一个传

ASP.NET Web Forms的改进

虽然ASP.NET Web Forms不是vNext计划的一部分,但它并没有被忽视.作为Visual Studio 2013 Update 2的一部分,它重新开始支持新工具.EF集成和Roslyn. 为什么Web Forms不是ASP.NET vNext的一部分 作为开始,让我们先为这个坏消息做下解释.为了改进性能和跨平台可移植性,ASP.NET vNext正在消除对System.Web的依赖.与OWIN相比,它缓慢而庞大,使测试工作多了不必要的麻烦. 虽然他们已经多次尝试将其分离出来,但Web

在ASP.NET Web Forms中用System.Web.Optimization取代SquishIt

将一个ASP.NET Web Forms项目从.NET Framework 4.0升级至.NET Framework 4.5之后,发现SquishIt竟然引发了HTTP Error 500.0 - Internal Server Error. SquishIt是一个开源的支持ASP.NET的js/css打包工具,项目地址:https://github.com/jetheredge/SquishIt,出生早于Microsoft ASP.NET Web Optimization Framework(

Using Friendly URLs in ASP.NET Web Forms

Introduction Websites often need to generate SEO friendly URLs. In ASP.NET Web Forms applications, a URL is tied to a physical .aspx file. This default mapping between a URL and physical file makes it difficult for Web Forms applications to generate

ASP.NET Web API WebHost宿主环境中管道、路由

ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境中ASP.NET Web API框架中的管道.路由又是哪一种形态. ASP.NET Web API路由.管道 ASP.NET Web API 开篇介绍示例 ASP.NET Web API 路由对象介绍 ASP.NET Web API 管道模型 ASP.NET Web API selfhost宿主环境

在ASP.NET Web Forms中使用页面导出伪xls Excel表格

将数据导出为Excel表格是比较常见的需求,也有很多组件支持导出真正的Excel表格.由于Excel能打开HTML文件,并支持其中的table元素以及p之类的文本元素的显示,所以把.html扩展名改为.xls是比较常用的一种方式.当然这只是一种骗人的伎俩,所以我称之为伪xls表格.不过对于要求不高的需求,这种方法还是比较简单快捷的. 在Web Forms项目中,除了用代码拼凑HTML元素标记外,还可以直接用窗体页面渲染HTML表格.Web Forms就是用来渲染动态HTML的,直接利用它,支持代

初试ASP.NET Web API/MVC API(附Demo)

参考页面: http://www.yuanjiaocheng.net/webapi/media-formatter.html http://www.yuanjiaocheng.net/webapi/webapi-filters.html http://www.yuanjiaocheng.net/webapi/create-crud-api-1.html http://www.yuanjiaocheng.net/webapi/create-crud-api-1-get.html http://ww

ASP.NET Web API(MVC API)

ASP.NET Web API是??一个框架,可以很容易构建达成了广泛的HTTP服务客户端,包括浏览器和移动设备.是构建RESTful应用程序的理想平台的.NET框架. 上面是微软对Web API给出的定义,其中包含两个关键字:HTTP和RESTful,其实从这一方面,大家就可以看出Web API和它的同胞兄弟:WebService和WCF有些不同了. HTTP 对于HTTP大家都不是很陌生,因为我们每天浏览网页填写的URL就是HTTP开头,但只是知道有这个东西,确没有想过它是什么,就好像我们对