C# .net mvc 依赖注入、控制反转、Ioc、Autoface(草稿)
来源:互联网 发布:橡木 知乎 编辑:程序博客网 时间:2024/06/05 00:30
C# .net mvc 依赖注入、控制反转、Ioc、Autoface
概念:
控制反转:就是把依赖的创建移到使用这些依赖的类的外部
我想先看下面例子:
FoodServies类中有一个方法EatFood
public class FoodServies { public void EatFood() { Console.WriteLine("吃东西"); } }
Systemdo类中需要调用EatFood,
public class Systemdo { FoodServies food; //构造函数,实例化的时候调用 public Systemdo() { food = new FoodServies(); } public void doSomething() { food.EatFood(); } }
Systemdo依赖FoodServies类,当一个组件依赖另外一个组件时,我们称其为耦合。
为了降低组件直接的耦合程度,一般采用独立但相关的步骤:
1.在两块代码之间引入抽象层,我们通常用的接口。
//在两块代码之间引入抽象层,我们通常用的接口 public interface IFoodServies { public void EatFood(); } public class FoodServies : IFoodServies { public void EatFood() { Console.WriteLine("吃东西"); } } public class Systemdo { IFoodServies food; //构造函数,实例化的时候调用 public Systemdo() { food = new FoodServies(); } public void doSomething() { food.EatFood(); } }
2.把选择抽象实现的责任移到消费类的外部。
需要把FoodServies类的创建移到Systemdo类的外面
把依赖的创建移到使用这些依赖的类的外部,这称为控制反转模式,之所以这样命名,是因为反转的是依赖的创建,正因为如此,才消除了消费者类对依赖创建的控制。
实现
1.服务定位器(不推荐)
public interface IFoodServiesLocator { object GetFoodServies(Type servicrType); } public static class ServiesLocatorExtensions { public static TService GetFoodServies<TService>(this IFoodServiesLocator locator) { return (TService)locator.GetFoodServies(typeof(TService)); } }
public interface IFoodServies { void EatFood(); }
public class FoodServies : IFoodServies { public void EatFood() { Console.WriteLine("吃东西"); } }
public class Systemdo { IFoodServies food; // public Systemdo(IFoodServiesLocator locator) { food = locator.GetFoodServies<IFoodServies>(); } public void doSomething() { food.EatFood(); } }
调用
这里写代码片
0 0
- C# .net mvc 依赖注入、控制反转、Ioc、Autoface(草稿)
- 搞定.NET MVC IOC控制反转,依赖注入
- 依赖注入 控制反转Ioc
- 控制反转(IOC),依赖注入(DI),耦合
- 依赖注入DI/控制反转IoC
- 控制反转(IoC)与依赖注入(DI)
- 控制反转IOC和依赖注入DI
- 控制反转IOC与依赖注入DI
- 控制反转IOC和依赖注入DI
- spring依赖注入(Ioc)控制反转
- 控制反转(IoC)与依赖注入(DI)
- 控制反转IOC与依赖注入DI
- 控制反转(依赖注入)IoC
- IOC控制反转(依赖注入思想)
- 栗子:控制反转(依赖注入)IOC
- IoC模式(控制反转、依赖注入)
- 控制反转(IOC)和依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- JS的本地保存localStorage、sessionStorage用法总结
- Programming input drivers
- 计算机网络面试题总结
- Linux crontab定时执行任务 命令格式与详细例子
- Fortran添加多行注释
- C# .net mvc 依赖注入、控制反转、Ioc、Autoface(草稿)
- js闭包
- MQTT+ActiveMQ实现消息推送(服务器端java实现)
- 2017/5/9第一篇博客内容 点击文字选中checkbox
- iOS开发 非常全的三方库、插件、大牛博客等等
- UI——Material Design设计之滑动菜单详解
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--PHP脚本的执行 词法分析和语法分析
- git常用命令(二)
- 欢迎使用CSDN-markdown编辑器