个人项目框架搭建 -- 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框架开发一个关于本地服务平台的后台管理平台.平台中可以管理用户.商品.商 ...
随机推荐
- 基于Quick-cocos2d-x的资源更新方案 一
图片来自网络 思绪何来 昨天写了一篇关于更新方案的理论 游戏开发:通过路径搜索优先级来进行补丁升级(从端游到手游) 今天继续细化一下 由于新项目采用的是Quick-cocos2d-x,那我就直接给出我 ...
- Git Shell 基本命令(官网脱水版)
用户信息 当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址. 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改: $ git conf ...
- 京东招聘Java开发人员
软件开发工程师(JAVA) 岗位职责: 1. 负责京东核心业务系统的需求分析.设计.开发工作 2. 负责相关技术文档编写工作 3. 解决系统中的关键问题和技术难题 任职要求: 1. 踏实诚恳.责任心强 ...
- 开源一个练手小App, PrintableCheckList
A small but powerful App, only focus on one thing, make you easy to print out your checklist. It is ...
- 生成lua的静态库.动态库.lua.exe和luac.exe
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...
- iOS-----正则表达式
摘要: 正则表达式在字符串检验和查找中用处很广,IOS中也有其支持的类. 正则表达式在iOS开发中的应用 正则表达式在字符串查找,替换,检测中的应用非常广泛,正则表达式是什么,有怎样的语法,可以参考我 ...
- <dependency>
<dependency> <groupId>org.hibernate</groupId> ...
- MySQL数据库的安装与密码配置
MySQL是由MySQL AB公司开发,后由Oracle公司收购 MySQL是一个关系型数据库管理系统 分为社区版和企业版 ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- Unix及类Unix系统文本编辑器的介绍
概述 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Em ...