本文只适合初步接触 autoafc 的小白,大佬勿喷。

autofac是一种很轻量的一个依赖注入容器

暂时先说一下手动注入的方式(因为使用自动注入遇到了坑,暂时先写一下手动注入)

1.先定义接口

    public interface IAccountService:IDependency
{
/// <summary>
/// 获取账户信息
/// </summary>
/// <param name="accountName">账户名</param>
/// <returns>账户信息</returns>
AccountBases GetAccount(string accountName);
}

此处的 IDependency 仅仅为一个空接口

2.接口的实现

    public class AccountService : BaseService, IAccountService
{
public AccountBases GetAccount(string accountName)
{
///实现代码,CRUD等等
}
}

3.控制器的使用

        private IAccountService AcountService;
///构造函数
public LoginController(IAccountService accountService)
{
AcountService = accountService;
}
public ActionResult Login(AccountBases loginInfo)
{
......... AccountBases entity = AcountService.GetAccount(loginInfo.AccountName);
.........
}

代码中的 AcountService.GetAccount(loginInfo.AccountName) 就实现了依赖注入,传统的写法 为

AcountService as = new AcountService();
AccountBases entity  = as.GetAccount(loginInfo.AccountName);

两者相比较依赖注入会更方便一点,除了方便,依赖注入的作用主要是为了降低系统的耦合。
4.核心:autofac,要使用autofac就得先去引入他的nuget包,这里就不说明了,不会的可以百度。
首先:新建一个类来初始化和注入实现
public class AutofacConfig
{
/// <summary>
/// 初始化
/// </summary>
public static void Initialise()
{
var builder = RegisterService();
DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build()));
} /// <summary>
/// 注入实现
/// </summary>
/// <returns></returns>
private static ContainerBuilder RegisterService()
{
var builder = new ContainerBuilder();
builder.RegisterType<AccountService>().As<IAccountService>();
builder.RegisterType<BusinessPaymentsService>().As<IBusinessPaymentsService>();
builder.RegisterType<ClearAllService>().As<IClearAllService>();
builder.RegisterType<MemberService>().As<IMemberService>();
builder.RegisterType<InInventoryDetailsService>().As<IInInventoryDetailsService>(); ////扫描IService和Service相关的程序集
var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToList(); //控制器注入
builder.RegisterControllers(assemblys.ToArray()); return builder;
}
}
使用 builder.RegisterType 来手动注入你想注入的接口

最后在Global文件中配置就完成了
        protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); //autofac依赖注入
AutofacConfig.Initialise(); Database.SetInitializer<ClearContext>(null);
}

autofac的手动注入到这就完成了。

 
 

Autofac--手动依赖注入的更多相关文章

  1. NopCommerce使用Autofac实现依赖注入

    NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...

  2. Autofac之依赖注入

    这里主要学习一下Autofac的依赖注入方式 默认构造函数注入 class A { public B _b; public A() { } public A(B b) { this._b = b; } ...

  3. Web API(六):使用Autofac实现依赖注入

    在这一篇文章将会讲解如何在Web API2中使用Autofac实现依赖注入. 一.创建实体类库 1.创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: us ...

  4. NET Core源代码通过Autofac实现依赖注入

    查看.NET Core源代码通过Autofac实现依赖注入到Controller属性   阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Cor ...

  5. Autofac 泛型依赖注入

    using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...

  6. 五:.net core(.NET 6)使用Autofac实现依赖注入

    Autofac的简单使用: 由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合: 删掉Class1,把Wsk.Core.Wsk.Core ...

  7. 查看.NET Core源代码通过Autofac实现依赖注入到Controller属性

    一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServi ...

  8. 【AutoFac】依赖注入和控制反转的使用

    在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的 ...

  9. WebAPi使用Autofac实现依赖注入

    WebAPi依赖注入  使用记录 笔记 1.NuGet包安装 2.控制器加入构造函数 3.Global.asax  ----Application_Start 应用程序启动时 using Autofa ...

  10. 转 Autofac怎么依赖注入ASP.NET MVC5类的静态方法

    之前我有介绍过怎么在ASP.NET mvc5中实现的Controller的依赖注入.一般是通过Contrller的构造函数的参数或者属性来注入,但是这有一个共同点就是调用这个类的方法一般都是实例方法, ...

随机推荐

  1. ajax C# webapi上传图片

    html ajax上传图片到服务器 后端采用asp.net webapi 前端有各种现实上传图片的控件,样式可以做的很美观.我这里只用基本的样式做图片上传. 前端代码 <input name=& ...

  2. 关于ORACLE的字符窜存储(未完善,欢迎补充)

    oracle中常见的用于存储字符串的数据类型有: 数据类型 是否定长 最多存储数 效率排行 备注 是否oracle特有 英文占位 中文占位 char 是 2000 比VARCHAR2稍高 char的长 ...

  3. VS2017常用快捷键整理

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示 Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添 ...

  4. s11 day104 数据库表结构与立即支付流程

    数据库表结构: 13张 1. 课程大类 2.课程子类 3.学位课程 4.老师表 5.奖学金 6.专题课 7.课程详情 8.课程大纲 9.常见问题 10.章节 11.课时 12.作业表 13.价格策略 ...

  5. Good Bye 2017 G. New Year and Original Order

    G. New Year and Original Order time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  6. vue 学前班003(生命周期)

    ue把整个生命周期划分为创建.挂载.更新.销毁等阶段,每个阶段都会给一些“钩子”让我们来做一些我们想实现的动作.学习实例的生命周期,能帮助我们理解vue实例的运作机制,更好地合理利用各个钩子来完成我们 ...

  7. 【wepy实战】wepy搭建完整项目

    使用小程序框架wepy,搭建完整实战项目.文章将从项目结构.配置.模块等进行逐步分析和学习. 文章适合小程序开发新手以及有经验的小程序developer,不喜勿喷,不吝赐教! 本文为作者原创,转发请标 ...

  8. linux文件系统底层原理

    Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中. 底层原理图: 在讲解各个 ...

  9. JAVA线程本地变量ThreadLocal和私有变量的区别

    ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些. 所以,在Java中编写线程局部变量的代码相对来说要笨 ...

  10. P1631 序列合并

    P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. ...