依赖注入框架Autofac的简单使用,以及在 ASP.NET MVC 中的使用
2012-04-06 17:31
1296 查看
Autofac 基础
转载自:/article/4758622.htmlAutofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的。于是,今天抽空研究了下它。下载地址:http://code.google.com/p/autofac/downloads/list
代码:
using System; using Autofac; using Autofac.Configuration; namespace DearBruce.AutofacDemo.ConsoleApp { class Program { static void Main(string[] args) { #region Demo1 - 硬编码注册 //var builder = new ContainerBuilder(); //builder.RegisterType<DatabaseManager>(); //builder.RegisterType<SqlDatabase>().As<IDatabase>(); //using (var container = builder.Build()) //{ // var manager = container.Resolve<DatabaseManager>(); // manager.Search("SELECT * FORM USER"); //} #endregion #region Demo2 - 读取配置文件 //var builder = new ContainerBuilder(); //builder.RegisterType<DatabaseManager>(); //builder.RegisterModule(new ConfigurationSettingsReader("autofac")); //using (var container = builder.Build()) //{ // var manager = container.Resolve<DatabaseManager>(); // manager.Search("SELECT * FORM USER"); //} #endregion #region Demo2 - 通过 Register 方法进行注册 var builder = new ContainerBuilder(); //builder.RegisterType<DatabaseManager>(); builder.RegisterModule(new ConfigurationSettingsReader("autofac")); builder.Register(c => new DatabaseManager(c.Resolve<IDatabase>())); using (var container = builder.Build()) { var manager = container.Resolve<DatabaseManager>(); manager.Search("SELECT * FORM USER"); } #endregion } } /// <summary> /// Database operate interface /// </summary> public interface IDatabase { string Name { get; } void Select(string commandText); void Insert(string commandText); void Update(string commandText); void Delete(string commandText); } public class SqlDatabase : IDatabase { public string Name { get { return "sqlserver"; } } public void Select(string commandText) { Console.WriteLine(string.Format("'{0}' is a query sql in {1}!", commandText, Name)); } public void Insert(string commandText) { Console.WriteLine(string.Format("'{0}' is a insert sql in {1}!", commandText, Name)); } public void Update(string commandText) { Console.WriteLine(string.Format("'{0}' is a update sql in {1}!", commandText, Name)); } public void Delete(string commandText) { Console.WriteLine(string.Format("'{0}' is a delete sql in {1}!", commandText, Name)); } } public class OracleDatabase : IDatabase { public string Name { get { return "oracle"; } } public void Select(string commandText) { Console.WriteLine(string.Format("'{0}' is a query sql in {1}!", commandText, Name)); } public void Insert(string commandText) { Console.WriteLine(string.Format("'{0}' is a insert sql in {1}!", commandText, Name)); } public void Update(string commandText) { Console.WriteLine(string.Format("'{0}' is a update sql in {1}!", commandText, Name)); } public void Delete(string commandText) { Console.WriteLine(string.Format("'{0}' is a delete sql in {1}!", commandText, Name)); } } public class DatabaseManager { IDatabase _database; public DatabaseManager(IDatabase database) { _database = database; } public void Search(string commandText) { _database.Select(commandText); } public void Add(string commandText) { _database.Insert(commandText); } public void Save(string commandText) { _database.Update(commandText); } public void Remove(string commandText) { _database.Delete(commandText); } } }
Demo 下载: http://files.cnblogs.com/Music/AutofacDemo.rar
Autofac 在 ASP.NET MVC 下的注册
请参考下面的代码,来自于 https://github.com/MarlabsInc/SocialGoal/using System.Web.Mvc; using Autofac; using Autofac.Integration.Mvc; using System.Reflection; using SocialGoal.Data.Repository; using SocialGoal.Data.Infrastructure; using SocialGoal.Service; using SocialGoal.Mappings; using SocialGoal.Web.Core.Authentication; using Microsoft.AspNet.Identity.EntityFramework; using SocialGoal.Model.Models; using SocialGoal.Data.Models; using Microsoft.AspNet.Identity; namespace SocialGoal { public static class Bootstrapper { public static void Run() { SetAutofacContainer(); //Configure AutoMapper AutoMapperConfiguration.Configure(); } private static void SetAutofacContainer() { var builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerHttpRequest(); builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerHttpRequest(); builder.RegisterAssemblyTypes(typeof(FocusRepository).Assembly) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces().InstancePerHttpRequest(); builder.RegisterAssemblyTypes(typeof(GoalService).Assembly) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces().InstancePerHttpRequest(); builder.RegisterAssemblyTypes(typeof(DefaultFormsAuthentication).Assembly) .Where(t => t.Name.EndsWith("Authentication")) .AsImplementedInterfaces().InstancePerHttpRequest(); builder.Register(c => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>( new SocialGoalEntities()))) .As<UserManager<ApplicationUser>>().InstancePerHttpRequest(); builder.RegisterFilterProvider(); IContainer container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } } }
谢谢浏览!
相关文章推荐
- asp.net mvc Autofac 依赖注入框架 使用
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入1
- Asp.Net MVC 之 Autofac 初步使用2 集成mvc 属性注入以及自动注入
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入2
- Asp.Net Mvc使用Autofac实现依赖注入
- 扩展ASP.NET MVC三层框架且使用StructureMap实现依赖注入1-Model层
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入1-Model层的实现
- 扩展ASP.NET MVC三层框架且使用StructureMap实现依赖注入1-Model层
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入2-Repository层的实现
- Asp.Net MVC 之 Autofac 初步使用2 集成mvc 属性注入以及自动注入
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- [转]依赖注入框架Autofac的简单使用
- Asp.mvc(三) ~ 使用 Autofac 实现依赖注入
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
- ASP.NET MVC 中使用Spring.NET实现简单的属性注入
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- 依赖注入框架Autofac的简单使用
- Asp.net MVC 中使用 Ninject 实现依赖注入
- Asp.net MVC 使用Autofac的简单使用 IOC