一:步骤和上一篇创建控制台项目一样,不过这次选择的是.net core区域下的Asp.net web application,Type里选择Web API(Web API类似java里的SpringBoot,而MVC则类似java里的SpringMVC);

二:注意它会默认创建一个在项目根目录下的Controllers目录,这个在实际项目里一般不会这么做,而是写一个尽可能简单的WebApi启动Project,而且这个Project一般的命名规范是Com.Xxx.ArtifactName.Entrance;

然后在创建其他的项目供这个启动项目来引用使用,在其他项目里命名也是Com.Xxx.ArtifactName.UserModule,表示这个是Artifact项目的User部分,然后才是Controller、Service、Service.Impl、Db、Db.Dao、Db.Service、Db.Service.Impl、Enums等等;

不过我们只是为了演示,所以这里就按创建的来;

三:我们为这个WebApi导入Autofac包,注意这次要导入一个额外的:Autofac.Extensions.DependencyInjection用于替换WebApi里默认的简单的IOC容器;

四:修改Startup类【注意这个类的实现是按照约定大于配置的方式,而不是通过实现什么接口来规定行为的】,找到public void ConfigureServices(IServiceCollection services),将它改为:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddControllersAsServices();
var builder = new ContainerBuilder();
builder.Populate(services);
// 这里还可以手动注入其他的如Service层的bean,不过可以register一个Module(不会管理这个对象只是起个过渡作用)然后在Module里去注册其他bean(可以扫描自己的配置和Assembly来实现自定义的一些配置)
var container = builder.Build();
return new AutofacServiceProvider(container);
}

  这里再强调一下,如果要管理已经注入的Controller,和注入及装配其他的Bean需要自己手动添加代码去注入,可以通过扫描自定义配置来实现Aop(Castle),和通过反射实现所有符合条件的bean的自动注入及通过反射实现这些bean的特定的属性的自动装配;

可以通过:Console.WriteLine(container.Resolve<IList<ValuesController>>().Count);得出是1,说明Controller注入到Autofac成功;

用Rider写一个由Autofac管理资源的WebAPI应用程序的更多相关文章

  1. 用qpython3写一个最简单的发送短信的程序

    到目前为止并没有多少手机应用是用python开发的,不过qpython可以作为一个不错的玩具推荐给大家来玩. 写一个最简单的发送短信的程序,代码如下: #-*-coding:utf8;-*- #qpy ...

  2. Individual Project "写一个能自动生成小学四则运算题目的程序"

    一.题目简介 写一个能自动生成小学四则运算题目的程序. 初步拟定要实现的功能后,估计一下自己需要花多长时间.编程过程中记录自己实际用了多长时间. 然后和同学们比较一下各自程序的功能.实现方法的异同等等 ...

  3. 写了一个远程桌面管理的Visual Studio扩展程序

    最近看了写Visual Studio扩展相关的一些资料,周末写了一个远程桌面管理器的扩展程序来练练手,由于和VisualStudio集成了,无需切换窗口,用起来还是觉得挺方便的. 关于远程桌面管理器的 ...

  4. 用Rider写一个有IOC容器Autofac的.net core的程序

    一:Autofac是一个和Java里的Spring IOC容器一样的东西,不过它确实没有Spring里的那么方便,主要是在于它没有提供足够的Api和扫描方式等等,不过优点是它比Spring要快很多,而 ...

  5. 使用Rider写一个C#的Hello World程序

    1. 安装Rider 首先到Jetbrains官网下载Rider:https://www.jetbrains.com/rider/ 然后到IntelliJ IDEA 注册码获得注册码. 2. 安装do ...

  6. 第十三篇 一个安装、管理windows服务的桌面程序

    在网上看到一个修改程序入口的程序去把windows 服务修改成控制台的程序,然后利用控制台的程序把服务安装和管理,也想起自己原来也写了一个对windows 报务管理的程序,不过是winform的.   ...

  7. 如何用Python写一个每分每时每天的定时程序

    1.计算生日是星期几 当你女朋友要过生日了,你肯定要定找家饭店订个餐庆祝一下,餐馆工作日会空一些,周末位置不好定,要是能知道她的生日是星期几就好了,下面这个程序就能搞定~~ 比如girl friend ...

  8. EC笔记:第三部分:13、以对象管理资源

    C++相比Java等含有gc的语言来说,内存管理方面(也包括资源管理)比较令人头疼.一些初级程序员,甚至是一些经验丰富的老程序员,也会经常在资源管理上犯错.这时候就需要一个能够自动管理资源的东西(gc ...

  9. 捣鼓一个Ajax请求管理器

    随着前端技术的不断发展,现在做的项目里很多页面里都会有大量的ajax请求,随之而来就有了一些问题: 1.没必要的ajax请求怎么处理? 2.ajax链式调用怎么维护? ajax链式调用最原始的写法: ...

随机推荐

  1. day38数据库MySQL基础

    数据库相关基础1 数据库介绍 1.数据库相关概念  数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端)  数据库管理管理系统RDBMS(本质就是一个C/S架构的套接字软件) ...

  2. Ajax的异步与同步(async)

    1.async值为true (异步)当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说 ...

  3. 分布式计算课程补充笔记 part 4

    ▶ 并行通讯方式: map 映射 全局一到一 全局单元素计算操作 transpose 转置 一到一 单元素位移 gather 收集 多到一 元素搬运不计算 scatter 分散 一到多 元素搬运不计算 ...

  4. leetcode279

    动态规划 public class Solution { public int NumSquares(int n) { var list = new List<int>(); list.A ...

  5. leetcode337

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  6. GIL计算python 2 和 python 3 计算密集型

    首先我画了一张图来表示GIL运行的方式: Python 3执行如下计算代码:#-*-conding:utf-8-*-import threading import timedef add(): n = ...

  7. c#读取文本并生成txt

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. springBoot拦截器的使用

    拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可 ...

  9. C#面向对象架构总结

    优秀的程序从命名开始,命名规则1.类名方法名需要见名知意.2.类的字段统统首字母小写并且封装仅供本类使用,并提供属性供外界使用,属性名开头大写,如果名字与类名冲突,那么在前面加下划线. 面向对象的7大 ...

  10. Pandas字符串操作及实例应用

    字符串操作 字符串对象方法 val = 'a,b, guido' val.split(',') ['a', 'b', ' guido'] pieces = [x.strip() for x in va ...