问题标签 [injectable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
viewhelper - ViewHelper 新/可注射的困境
我正在尝试按照Misko Heverys 的见解设计一个应用程序。这是一个有趣的实验,也是一个挑战。目前我正在为我的 ViewHelper 实现而苦苦挣扎。
ViewHelper 将模型与视图分离。在我的实现中,它包装模型并提供 API 供视图使用。我正在使用 PHP,但我希望每个人都可以阅读该实现:
在我的模板(视图)文件中,可以这样调用:
到现在为止还挺好。我遇到的问题是当我想将过滤器附加到 ViewHelpers 时。我想要过滤 title() 调用输出的插件。该方法将变成这样:
我需要让观察者在那里,或者一个 EventHandler,或者任何服务(在我看来是一个新的,所以它需要通过堆栈传递)。我怎样才能按照 Misko Hevery 的原则做到这一点?我知道没有它我怎么能做到这一点。我对如何接受它很感兴趣,目前我没有看到解决方案。ViewHelper 也可以是可注入的,但是将模型放入其中是个问题。
oop - 创建类时的依赖注入也需要运行时值?
假设您将系统划分为 Value 对象和 Services 对象(如“Growing Object-Oriented Software, Guided by Tests”中所建议的那样。Misko Hevery 称这些为“newables”和“injectables”。
当你的一个值对象突然需要访问服务来实现它的方法时会发生什么?
假设您有一个不错的简单 Value 对象。它是不可变的,包含一些信息,仅此而已。假设我们像这样使用它:
到现在为止还挺好。 isValid()
对卡号实现校验位算法并返回真/假。
现在,假设我希望通过根据当前时间验证到期日期来增强系统。您如何建议在不破坏 Value 对象/Service 对象范式的情况下完成此操作?我希望这个类继续是可单元测试的。
CreditCard
现在有一个依赖,但是由于它的创建方式不能被注入,所以依赖注入已经淘汰了。CreditCard
班级不应该呼唤单身人士(我认为全局访问单身人士是不好的做法)- 启用该行为
CreditCardVerificationService.validateCard()
意味着必须重新访问所有现有代码。isValid() 的实现正在泄漏。
我知道可以做一些事情来解决这个问题,但是最干净的方法是什么?
dependency-injection - 依赖注入,将一个“可注入”的对象(服务)注入到一个新的(实体)中
在编写代码时,我们应该能够识别两大类对象:
- 注射剂
- 新品
http://www.loosecouplings.com/2011/01/how-to-write-testable-code-overview.html
http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/
可注入对象是在其构造函数中公开依赖关系的对象(服务),这些依赖关系通常使用 IoC 容器解决,这些对象只能在其构造函数中请求其他可注入对象
Newable 是在其构造函数中也暴露依赖关系的对象,但 newables 只能请求其他可更新对象(实体、值对象),可更新对象的另一个特征是它们不应该持有对可注入对象的引用
但是在写代码的时候,我们经常需要将一个服务(injectable)“注入”到一个Entity(newable)中
我一直在想,也许在可更新对象中公开服务依赖项更好地在方法级别进行,但这听起来需要做很多工作......每次调用方法时都要考虑解决依赖关系...... . 这闻起来就像我们必须使用服务定位器反模式
我解决这个问题的方法是:
使用暴露依赖项的方法创建接口(该方法中将使用服务)
为接口创建一个扩展方法并将其放置在不同的命名空间中,可能在另一个程序集中,然后将调用包装到使用服务定位器解决依赖关系的原始方法
这样做,我们可以在新对象和可注入对象之间保持一致的分离,并且能够轻松地在我们的新对象中使用服务
- 你怎么看?
- 在扩展方法中使用服务定位器被认为是一种不好的做法?
- 您将如何对扩展方法调用进行单元测试?
java - 用于方法多参数可注入的自定义 InjectableProvider,解析时出错
我很难用一种干净利落的方式来实现这个 JsonParamInjectable。我在这个论坛和其他地方进行了搜索,但没有发现任何提示可以告诉我如何干净利落地实现它。
对于 jaxrs 方法:
它将 json {"a":1, "b":2} 解析为参数 a 和 b
为此,我实现了一个 InjectableProvider,它通过方法参数创建一个 JsonInjectable 实例。
魔术是在这个 JsonInjectable 中完成的,它的 where id 做了一个肮脏的把戏:
问题是,在某些情况下,实体是空的,我怀疑是一个有效的 http 请求。导致 java.io.EOFException: End of input at line 1 column 2. 这个问题出现在生产中,但我无法在测试环境中重现它。
如果有问题,肯定与“context != context2”有关。对于每个可注入对象都绑定到一个参数,并且以我无法控制的顺序调用可注入对象,并且每个可注入对象都处理相同的数据:从请求实体解析 json。所以为了避免每次都重新解析实体,我使用 context != context2 来检测它是否是一个新请求。
检测新请求的好方法是什么,因此每个请求只能发生 1 次 json 解析。
unit-testing - 此时缺少对模拟类型的调用;
我是 jMockit 的新手。我试图在一个方法中模拟 java.io.File 类型的多个实例。在某些地方,我不应该模拟文件 Object. 出于这个原因,我正在使用@Injectable
. 它抛出以下异常。
我不想模拟 java.io.File 的所有实例。我希望从方法返回的实例是实际的文件。
下面是测试类。
下面是实际的实现方法
下面是堆栈跟踪。
请帮我解决问题。
java - JMockit 的 @Injectable 用于非自动装配字段
我有一个类,其中一些字段是@Autowired
,有些不是,在测试类中,我想自动注入值不仅用于@Autowired
字段。但是自动注入仅发生在@Autowired
字段中。
这是一个例子:
测试将在第二行失败。id 字段不会自动注入。但是,如果我从中删除@Autowired
注释UsersDAO
,则测试通过。
为什么会这样?我该如何克服这个问题?我知道我可以在 id 字段中添加一些其他注释,但如果可能的话,我希望在不更改原始源代码的情况下解决它。
null - Jersey 2.x 自定义注入注解 NULL
我正在关注22.1。实现自定义注入提供程序段落
https://jersey.java.net/documentation/latest/user-guide.html#deployment
我将我的课程定义如下:
MyBinder 在哪里:
这是我的简单注释:
我想在我的 res 服务中使用注释:
在我的 web.xml 中,我通过以下配置代码部署了 Jersey servlet 容器(我错了)和 javax.ws.rs.Application:
进入调试模式,我看到在调用我的休息服务时,永远不会调用提供方法......确实总是为空。
我哪里错了?我正在使用 jboss Wildfly 9.0 并使用 Jersey 2.21 库
javascript - Angular2 - 注入@Injectable
我有一个用于从 API 获取数据的Angular2
应用程序。service
按照这个例子,我想创建一个单独的文件,它应该包含一些配置数据。我的问题是我的服务有一个@Injectable()
装饰器,我不确定是否可以provide
在元数据中传递一个数组,我将在其中注入配置,如教程中所示。欢迎任何曾经遇到过这样的问题的人分享他的解决方案:)
typescript - Angular2 装饰器未定义
我的项目使用 webpack 构建,但是当我从 localhost 托管应用程序时出现错误。
未捕获的 ReferenceError:__decorate 未定义。
最初我得到了 Injectable() 装饰器的错误。但是当我取消注释时,我得到了同样的错误,但扩展了。
我创建了一个重复错误的存储库。
https://github.com/shawnrmoss/decorators
我怀疑这与打字有关,因为当我不得不更改这些定义时问题就开始了。
typings_orig.json 具有原始类型定义
我不确定发生了什么。希望有人可以对此有所启发并帮助我。
谢谢。
angular - Ionic 2 - 服务意外令牌错误
我正在尝试在 Ionic 2 应用程序的代码中使用 Injectable,但出现此错误。
模块构建失败:SyntaxError: /home.js: Unexpected token (10:25)
这是我的代码:(home.js 文件)。
这是 wpservice 文件:
奇怪的是,这个错误只发生在 2 月 26 日晚上。在此之前它工作正常。