Zenject——轻量级依赖注入框架 for Unity
来源:互联网 发布:为什么淘宝退款打不开 编辑:程序博客网 时间:2024/05/01 23:40
理论
在一般情况下,如果一个类依赖于某些服务,那么可能会在内部去创建需要的服务:
public class Foo{ ISomeService _service; public Foo() { _service = new SomeService(); } public void DoSomething() { _service.PerformTask(); ... }}
在项目规模比较小的时候这种做法无可厚非,但随着项目规模的扩大,Foo类与SomeService的紧耦合会显得缺少灵活性。
Foo应该只需要关心自身的实现并且确认服务提供了自身所需的接口即可,而不需要关心所选择的服务的实现细节:
public class Foo{ ISomeService _service; public Foo(ISomeService service) { _service = service; } public void DoSomething() { _service.PerformTask(); ... }}
在这种定义方式下,假设bar类使用了Foo类,那它也不用关心Foo如何使用SomeService的具体实现:
public class Bar{ ISomeService _service; public Bar(ISomeService service) { _service = service; } public void DoSomething() { var foo = new Foo(_service); foo.DoSomething(); ... }}
使用依赖注入的方式,所需要的服务都需要等待外部来注入,在这张根据依赖关系而组成的“对象图”中,实现注入逻辑的部分就是它的”根部”(也就是前面文章说到的注入器),它看起来就类似:
var service = new SomeService();var foo = new Foo(service);var bar = new Bar(foo);.. etc.
作为依赖注入框架,Zenject会帮助完成这一部分工作,因此程序员不需要再编写如以上的代码;
其他问题
使用DI要明白和理解使用它的优点是什么,其一就是由于约定了每个类都不去干涉所依赖服务的具体实现,带来的好处就是对于服务类接口的修改是很方便的(如上面的例子中要修改ISomeServer的内部实现逻辑,只要确保PerformTask的服务,那么Foo根本不需要任何的改动)。
另一个问题是运用DI时,会从每个类中抽出接口,并使用这些接口,而不是直接使用类,原本如此的定义的目的是为了使代码具有更松的耦合,然而大多数情况下,某个功能只有单一的,特点的类去实现,这种情况下使用接口只会增加不必要的开销,而且类自身已经提供了共有成员作为接口。
一个好的经验法则是:只有当一个类拥有一个以上的不同实现时,才为其创建接口(重用、抽象原则)。
具体的使用说明可以看官方Githttps://github.com/modesttree/Zenject#hello-world-example
- Zenject——轻量级依赖注入框架 for Unity
- Ninject——依赖注入的轻量级框架(MVC框架下的使用)
- C# 对轻量级(IoC Container)依赖注入Unity的使用
- C# 对轻量级(IoC Container)依赖注入Unity的使用
- C# 对轻量级(IoC Container)依赖注入Unity的使用
- C# 对轻量级(IoC Container)依赖注入Unity的使用
- Objection 一个轻量级的Objective-C依赖注入框架
- Android——Dagger2依赖注入框架
- Spring框架——IOC依赖注入
- Unity 应用程序块(Unity)是一个轻量级、可扩展的依赖注入容器
- PowerInjectUnity,一个Unity的依赖注入框架说明
- unity实现依赖注入
- 微软依赖注入Unity
- C# Unity依赖注入
- 从零开始写javaweb框架笔记15-搭建轻量级JAVAWEB框架-实现依赖注入功能
- 从零开始写javaweb框架笔记15-搭建轻量级JAVAWEB框架-实现依赖注入功能
- 依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介
- 依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介
- linux菜鸟学习(七)----chmod,tar,chgrp,chown,gzip
- 抽象类、接口的具体用法
- phpstorm编辑远程项目
- 【JZOJ4648】锦标赛
- 【NOIP2016提高A组模拟7.15】计数
- Zenject——轻量级依赖注入框架 for Unity
- 详解C++中的纯虚函数(虚函数区别)&多态性 以及理解
- 记录小白前端成长01
- 读《代码大全》第2版,第 7 章高质量的子程序
- 好好学习
- 总结2
- Sublime CSS属性代码提示
- 读书笔记-现代操作系统-7多媒体操作系统-7.6多媒体文件系统泛型7.7文件存放
- Java编码规则