个人项目框架搭建 -- 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框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...
随机推荐
- MySQL MMM高可用方案
200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍搭建MMM方案以及MMM架构的原理.这里不介绍主从.主主的搭建方 ...
- SQL Server 深入解析索引存储(上)
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆/聚集索引 概述 最近要分享一个课件就重新把这块知识整理了一遍出来,篇幅有点长,想要理解的透彻还是要上机实践. 聚 ...
- 深入挖掘.NET序列化机制——实现更易用的序列化方案
.NET框架为程序员提供了“序列化和反序列化”这一有力的工具,使用它,我们能很容易的将内存中的对象图转化为字节流,并在需要的时候再将其恢复.这一技术的典型应用场景包括[1] : 应用程序运行状态的持久 ...
- Mac 软件篇
对于美好事务的追求无论何时都不算晚. ** 文章内容来着我整理的fetool,以下内容可能更新不及时 ** Mac 下的软件那么多,又是免费又是付费,应该怎么选呢?我来分享下我的推荐列表,推荐的优先级 ...
- enum操作--获取枚举里的最大值
一个应用系统,如果程序里没有任何enum的使用,我认为它的可读性是有待商榷的. 求枚举里的最大/最小枚举值, 其实是对Array进行操作: enum EnumTest { ddd = , eee } ...
- Android开发学习之路-Volley源码解析
从简单的StringRequest入手看看Volley的工作机制. 先简单说下Volley的用法: ① 获取一个RequestQueue mRequestQueue = Volley.newReque ...
- Atitit.软件开发的几大规则,法则,与原则Principle v3
Atitit.软件开发的几大规则,法则,与原则Principle v31.1. 修改历史22. 设计模式六大原则22.1. 设计模式六大原则(1):单一职责原则22.2. 设计模式六大原则(2):里 ...
- 移动端页面按手机屏幕分辨率自动缩放的js
<script> var phoneWidth = parseInt(window.screen.width); var phoneHeight = parseInt(window.scr ...
- SSIS Design6:利用数据流
数据流利用内存来缓冲数据,并在内存中处理数据转换,由于内存的访问速度是非常快的,所以SSIS数据流转换性能是非常高效的.SSIS Engine将数据分批加载到内存中,当Data Flow将一批新的数据 ...
- OPENVPN+MYSQL认证+客户端配置
安装环境:ubuntu 12.04 x64 一 服务器端 1.安装openvpn及相应包 1 2 root@jkb:~# aptitude install openvpn root@jkb:~# ap ...