1、添加autofac相关程序集/使用Nuget

2、引入命名空间

using Autofac;
using Autofac.Configuration;

3、使用

3.1:直接使用

var build = new ContainerBuilder();
build.RegisterType<MemoryCacheManager>();
build.Register<ICacheManager>(c => new MemoryCacheManager()).InstancePerLifetimeScope();

//builder.RegisterType<FileLogger>();
//builder.RegisterType<FileLogger>().As<ILogger>();

using (var container = build.Build())
{
ICacheManager cache = container.Resolve<ICacheManager>();
//使用
}

3.2:配置文件使用

//1.在配置文件中配置如下代码 依瓢画葫芦即可

EnterpriseFrame.IService 接口类库
EnterpriseFrame.IService.IAdminService 要注册的接口
EnterpriseFrame.Service 实现接口的命名空间
EnterpriseFrame.Service.AdminService 实现的接口
<configuration>
  <configSections>
<section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
</configSections>
<autofac defaultAssembly="EnterpriseFrame.IService">
<components>
<component type="EnterpriseFrame.Service.AdminService, EnterpriseFrame.Service" service="EnterpriseFrame.IService.IAdminService" />
</components>
</autofac>
</configuration>
//2.使用
var build = new ContainerBuilder();
build.RegisterModule(new ConfigurationSettingsReader("autofac"));
using (var container = build.Build())
{
var service = container.Resolve<IAdminService>();
var result = service.CheckAdminPwd("admin", "");
Assert.IsTrue(result);
}

3.3在mvc的controller使用构造函数的方式注册

//在Application_Start()中调用
var builder = new ContainerBuilder();
AutofacRegisterController(builder);//注册Controller的构造函数
AutofacRegisterService(builder);//注册使用到的服务
private void AutofacRegisterController(ContainerBuilder builder)
{
var baseType = typeof(IDependency);
//var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList();
var assemblys = System.Web.Compilation.BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();
var AllServices = assemblys
.SelectMany(s => s.GetTypes())
.Where(p => baseType.IsAssignableFrom(p) && p != baseType); builder.RegisterControllers(assemblys.ToArray()); builder.RegisterAssemblyTypes(assemblys.ToArray())
.Where(t => baseType.IsAssignableFrom(t) && t != baseType)
.AsImplementedInterfaces().InstancePerLifetimeScope();
}

private void AutofacRegisterService(ContainerBuilder builder)
{
  builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
  builder.Register<IDbContext>(c => new EnterpriseContext("name=EnterpriseCon")).InstancePerLifetimeScope();//连接字符串
  builder.Register<ILogger>(c => new MyLogger(HttpContext.Current.Server.MapPath(""))).InstancePerLifetimeScope();//注册日志 保存至根目录
  builder.Register<ICacheManager>(c => new MemoryCacheManager()).InstancePerLifetimeScope();//注册缓存

}

控制器代码:

public class TestController : Controller
{
private ILogger _logger;
private ICacheManager _cacheManager;
public TestController(ILogger logger,ICacheManager cache)
{
_logger = logger;
_cacheManager = cache;
}
private static string TEST_CACHE_KEY = "TEST_CACHE_KEY";
public ActionResult Caching()
{ string time = _cacheManager.Get<string>(TEST_CACHE_KEY, , () => { return DateTime.Now.ToString(); });
return Content(time);
}
}

Global.asax Application_Start方法中可以这样写:

            //方式二
//var builder = new ContainerBuilder();
//builder.RegisterType<FileLogger>();
//builder.Register<ILogger>(c => new FileLogger()).InstancePerLifetimeScope(); //var assembly = Assembly.GetExecutingAssembly();
//builder.RegisterControllers(assembly).PropertiesAutowired();//PropertiesAutowired();属性注入
//var container = builder.Build();
//DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

文中若有错误和不足之处,还望路过的道友指出。

个人项目框架搭建 -- Autofac简单使用记录的更多相关文章

  1. .Net Core3.0 WebApi 项目框架搭建 一:实现简单的Resful Api

    .Net Core3.0 WebApi 项目框架搭建:目录 开发环境 Visual Studio 2019.net core 3.1 创建项目 新建.net core web项目,如果没有安装.net ...

  2. 权限管理系统之项目框架搭建并集成日志、mybatis和分页

    前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...

  3. .Net Core3.0 WebApi 项目框架搭建 五:仓储模式

    .Net Core3.0 WebApi 项目框架搭建:目录 理论介绍 仓储(Respository)是存在于工作单元和数据库之间单独分离出来的一层,是对数据访问的封装.其优点: 1)业务层不需要知道它 ...

  4. ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)

    Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...

  5. (三) Angular2项目框架搭建心得

    前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...

  6. .Net Core3.0 WebApi 项目框架搭建 五: 轻量型ORM+异步泛型仓储

    .Net Core3.0 WebApi 项目框架搭建:目录 SqlSugar介绍 SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET C ...

  7. .Net Core3.0 WebApi 项目框架搭建:目录

    一.目录 .Net Core3.0 WebApi 项目框架搭建 一:实现简单的Resful Api .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger .Net ...

  8. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  9. go语言实战教程:实战项目资源导入和项目框架搭建

    从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...

随机推荐

  1. MySQL实现嵌套集合模型

    MySQL实现嵌套集合模型 译文主要是介绍如何用MySQL来存储嵌套集合数据.在其中会增加一些自己的理解,也会删除掉一些自认为无用的废话. 这篇文章主要讲的是嵌套集合模型,所以邻接表不是本文的重点,简 ...

  2. ios 避免循环引用

    类似网络请求的情况下会导致循环引用,但是 如果网络请求的对象是局部变量,就必须用self,不能用weakSelf,否则,一旦当前方法所在对象销毁,那weakSelf就为空了(如果目的是这样,那就另当别 ...

  3. Atitit View事件分发机制

    1. Atitit View事件分发机制 1. Atitit View事件分发机制1 1.1. 三个关键方法 dispatchTouchEvent onInterceptTouchEvent onTo ...

  4. c#运算表达式

    1.取补运算 操作符:~ 操作数:限定int,uint,long,ulong和枚举类型,返回值于操作数类型相同 sbyte,byte,short,ushort,也可以运算,但运算前都将隐式转换为int ...

  5. SQL Server中的高可用性(3)----复制

        在本系列文章的前两篇对高可用性的意义和单实例下的高可用性做了阐述.但是当随着数据量的增长,以及对RTO和RPO要求的严格,单实例已经无法满足HA/DR方面的要求,因此需要做多实例的高可用性.本 ...

  6. canvas学习笔记一

    为了研究pixi库,就顺带从头到位学习下canvas吧 判断支持力度 var webgl = (function() { try { var canvas = document.createEleme ...

  7. Use Qt in Debian for OpenCASCADE

    Use Qt in Debian for OpenCASCADE eryar@163.com Recently several OpenCASCADE enthusiasts want to buil ...

  8. Python第一天 - 函数

    ---恢复内容开始--- (一)定义一个函数 def 函数名(参数): 函数体 return 返回值 例: def mySum(x , y): return int(x)+int(y)print(my ...

  9. 学用MVC4做网站六后台管理:6.1管理员(续)

    接6.1 首先在~/Areas/Admin/Models文件夹添加管理员模型Administrator.cs using System.ComponentModel.DataAnnotations; ...

  10. 深入学习jQuery鼠标事件

    × 目录 [1]类型 [2]写法 [3]合成事件[4]鼠标按键[5]修改键[6]坐标位置 前面的话 鼠标事件是DOM事件中最常用的事件,jQuery对鼠标事件进行了封装和扩展.本文将详细介绍jQuer ...