呀咧呀咧,好忙啊......ASP.Net的博客先停更了,记点随笔吧......

先说依赖注入:

一辆车需要轮子,可以用抓地好的,也可以用极速高的.

  那么轮子(比如两种):

public class HighSpeedTire : Tire
{//..........public override void Spin(){//Do something.
    }
}public class HighGripTire : Tire
{//..........public override void Spin(){//Do something.
    }
}

  但是我们事先不知道用什么轮子?

public class Car
{public void Drive() {Tire tire = ???tire.Spin();}
}

    "???"该写什么呢?那么重载一下?那万一之后又新增10种轮胎怎么办?(还要不要人活了?客户经理你吃屎啊?当初你不说有这么多轮胎?2333)

所以这个时候,(锵锵!)依赖注入(or 反转控制)登场:

public class Car
{private Tire tire;public Car(Tire tire){this.tire = tire;}public void Drive() {tire.Spin();}
}

之后,不管什么tire装上来都可以轻松应对!

Then,依赖属性:

个人理解的依赖属性的特点:

  1. 静态:静态意味着该属性可以被很多类实例共享,于是可以实现多个同类控件的数据联动
  2. 字典类型:外部调用类属性的时候,通过字典查询获得依赖属性值
  3. 注册:依赖属性需要通过DependencyProperty.Register([属性名],[属性类型],[属性所有者类型],[元数据信息])方法进行注册才能使用(此处采用的静态构造函数注册)
public partial class MyButton : Button {public static DependencyProperty PressedImageProperty;//依赖属性public string PressedImage {get { return (string)GetValue(PressedImageProperty); }set { SetValue(PressedImageProperty, value); }}static MyButton() { //静态注册PressedImageProperty = DependencyProperty.Register("PressedImage", typeof(string), typeof(MyButton),new FrameworkPropertyMetadata(""));}public MyButton () {InitializeComponent();}

以上的内容仅是讲解依赖属性的实质,不涉及到应用,接下来是使用:

Binding buttonToCaculate = new Binding("CaculateCommand") { Source = (CaculatorViewModel)DataContext };
this.button1.SetBinding(Button.CommandProperty, buttonToCaculate);
this.button2.SetBinding(Button.CommandProperty, buttonToCaculate);

这里的CommandProperty就是一个依赖属性,通过以上代码,我们就可以实现两个按钮对同一个操作的绑定,当我们有很多个按钮的时候,因为没有了重复的数据(依赖属性是静态的属性字典,多个具有相同属性的实例共用一组字典值),就会显著降低内存占用.其次,依赖属性有效适用于以下情形:某个类会有很多个实例,而且大部分的类实例具有相同的属性,但是你也没办法将那一小部分的实例独立成其他类.

举个栗子:人有手&脚&头&头发,但是有的人没有头发,你会将它独立为"光头人"么?用依赖属性将它们全部默认为Not Null(占用极少内存),个别光头就给他Null,解决.

这就是所谓的数据绑定,数据绑定,按照本人的理解,应该是MVVM的基础,架构MVVM的时候,就需要这样进行数据绑定,实现界面和后台代码的解耦(操作全部在ViewModel中通过调用Command执行).

另外有个小技巧:VS中键入"propdp"后连按两次TAB会生成依赖属性的模板.

转载于:https://www.cnblogs.com/snys98/p/4423312.html

关于依赖注入和依赖属性相关推荐

  1. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )

    文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  2. 依赖注入?依赖注入是如何实现解耦的?

    如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的? 第一章:小明和他的手机 从前有个人叫小明 小明有三大爱好,抽烟,喝酒-- 咳咳,不好意思,走错片场了.应该是逛知乎.玩王者农药和抢微信红包 ...

  3. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )

    文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  4. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )

    文章目录 前言 一.获取要注入事件的 View 对象 二.通过反射获取 View 组件的事件设置方法并执行 前言 Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , ...

  5. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入代码示例 )

    文章目录 总结 一.Android 事件依赖注入示例 1.创建依赖注入库 2.声明注解 (1).修饰注解的注解 (2).修饰方法的注解 3.Activity 基类 4.动态代理类调用处理程序 5.依赖 ...

  6. 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )

    文章目录 总结 一.Android 视图依赖注入步骤 二.Android 布局依赖注入示例 1.创建依赖注入库 2.声明注解 3.Activity 基类 4.依赖注入工具类 5.客户端 Activit ...

  7. spring依赖注入_Spring依赖注入

    spring依赖注入 介绍: 在设计良好的Java应用程序中,这些类应尽可能独立. 这样的设计提高了组件的可重用性. 它还使对各个组件进行单元测试变得更加容易. 依赖注入的概念促进了Java对象之间的 ...

  8. java依赖注入_Java依赖注入选项

    java依赖注入 我想花一些时间来总结一些流行的Java依赖注入(DI)框架. 这是可用功能的高级概述. 首先,什么是依赖注入? "依赖注入是一种软件设计模式,可以删除硬编码的依赖,并可以在 ...

  9. php 依赖注入框架,依赖注入模式(Dependency Injection)

    依赖注入模式(Dependency Injection) 由 学院君 创建于5年前, 最后更新于 10个月前 版本号 #3 18333 views 16 likes 0 collects 1.模式定义 ...

  10. php mvc多层依赖注入,演示依赖注入,MVC,路由案例 2019年10月12日 08:00

    今晚学习了依赖注入,MVC,路由知识,课堂上听的时候感觉没有问题,实际操作的时候还是遇到了很多问题,写起比较生,没法融会贯通.总体来说还是非常不错的.现将各个功能实例如下: 1.依赖注入 实例 //依 ...

最新文章

  1. 漫画:骚操作系列(灯泡开关的经典面试题)
  2. 聊聊Synchronized
  3. numpy 点乘_斯坦福CS217(六)Spatial点乘示例
  4. word、excel、ppt 办公文件 在线预览
  5. 开发指南专题九:JEECG微云快速开发平台-表单校验组件ValidForm
  6. ios图片轮播 (基础篇——UIScrollView实现方式)
  7. 主数据处理链碰到空数据节点不在继续执行的问题解决方案
  8. KASLR-内核地址空间布局随机化
  9. PHP微信H5支付Demo
  10. 六轴传感器使用学习记录
  11. 谈谈EOS的出块时间,不可逆时间,BFT
  12. bilibili执行董事陈睿:我在进B站之前是一个正常人
  13. 一台电脑安装两个jdk的方法
  14. 找工作与找对象的关系
  15. 新建STM32F427IIH标准库工程
  16. 图深度学习——卷积神经网络循环神经网络自编码器
  17. java中的反射和Class类
  18. 【项目总结】之——JS分割字符串
  19. PS图层添加模式解说
  20. ssm毕设项目Java防作弊的电子投票系统rgobs(java+VUE+Mybatis+Maven+Mysql+sprnig)

热门文章

  1. linux命令前的$是什么意思,linux中$符号的基础用法总结
  2. GNN教程:采样模型GraphSage理解(工业上图模型的雏形)
  3. 【错误记录】IntelliJ IDEA 编译 Groovy 项目报错 ( gradle-resources-test:XX: java.lang.NoClassDefFoundError: org )
  4. fg-bg Assignment Imbalance problem
  5. CapstoneCS5263|DP转HDMI 4K60HZ方案|替代PS176芯片
  6. linux x200 黑屏,Thinkpad x200黑屏(一长两短) 复原
  7. 微软官方dllcache恢复的批处理
  8. SDH(标准DH)和MDH(改进DH)
  9. 二十一世纪的计算研讨会及启示
  10. paddleocr cpp_infer 操作说明