个人项目框架搭建 -- Autofac简单使用记录
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简单使用记录的更多相关文章
- .Net Core3.0 WebApi 项目框架搭建 一:实现简单的Resful Api
.Net Core3.0 WebApi 项目框架搭建:目录 开发环境 Visual Studio 2019.net core 3.1 创建项目 新建.net core web项目,如果没有安装.net ...
- 权限管理系统之项目框架搭建并集成日志、mybatis和分页
前一篇博客中使用LayUI实现了列表页面和编辑页面的显示交互,但列表页面table渲染的数据是固定数据,本篇博客主要是将固定数据变成数据库数据. 一.项目框架 首先要解决的是项目框架问题,搭建什么样的 ...
- .Net Core3.0 WebApi 项目框架搭建 五:仓储模式
.Net Core3.0 WebApi 项目框架搭建:目录 理论介绍 仓储(Respository)是存在于工作单元和数据库之间单独分离出来的一层,是对数据访问的封装.其优点: 1)业务层不需要知道它 ...
- ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)
Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...
- (三) Angular2项目框架搭建心得
前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...
- .Net Core3.0 WebApi 项目框架搭建 五: 轻量型ORM+异步泛型仓储
.Net Core3.0 WebApi 项目框架搭建:目录 SqlSugar介绍 SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET C ...
- .Net Core3.0 WebApi 项目框架搭建:目录
一.目录 .Net Core3.0 WebApi 项目框架搭建 一:实现简单的Resful Api .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger .Net ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- go语言实战教程:实战项目资源导入和项目框架搭建
从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发. 实战项目框架搭建 我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...
随机推荐
- java中文乱码解决之道(八)-----解决URL中文乱码问题
我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不 ...
- 大话JS面向对象之开篇万物皆对象------(ATM取款机引发的深思)
一,总体概要 OO(面向对象)概念的提出是软件开发工程发展的一次革命,多年来我们借助它使得很多大型应用程序得以顺利实现.如果您还没有掌握并使用OO进行程序设计和开发,那么您无疑还停留在软件开发的石器时 ...
- Node.js + Web Socket 打造即时聊天程序嗨聊
前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...
- Node.js返回JSONP
在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP.基于安全性考虑,浏览器会存在同源策略,然而<scri ...
- 搞懂 SynchronizationContext(第一部分)【翻译】
SynchronizationContext -MSDN 很让人失望 我不知道为什么,目前在.Net下关于这个类只有很少的资料.MSDN文档也只有很少的关于如何使用SynchronizationCon ...
- 决策树和基于决策树的集成方法(DT,RF,GBDT,XGBT)复习总结
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 内容: 1.算法概述 1.1 决策树(DT)是一种基本的分类和回归方法.在分类问题中它可以认为是if-the ...
- Android笔记——判断程序是否第一次启动
public class Welcome extends Activity { private final long SPLASH_LENGTH = 2000; Handler handler = n ...
- Ajax概要:
Ajax概要: Ajax不是个全新的技术,它是多种技术合并在一起产生的,包括XHTML,CSS,JavaScript,XmlHttpRequest,XML,JSON,DOM等 优点:(这也解释了为何我 ...
- Go 作用
Go语句的作用是表示一个batch(多条Tsql命令)的结束,并向sql server 提交batch,由于局部变量的作用域是基于batch的,所以,go语句限制局部变量的作用域在一个batch中. ...
- Package Configurations的使用示例
SSIS提供Package Configurations功能,能够动态修改配置数据,使package执行不同的变量,从不同的connection中获取数据,而这些变化,不需要修改Package,不需要 ...