小编Mat*_*Dev的帖子

匕首2:@Module(包括=)做什么?

我正在研究一个项目,我试图尽可能地模块化.

我正在尝试使用@Module(includes = {})注释来实现我的目标,并且它的工作效果不佳.

我有一个用于所有Java代码的gradle模块,并且每个部分都有一个模块(例如,关于页面依赖关系的AboutModule).然后,对于整个"Core"gradle模块,我有一个名为"CoreModule"的Dagger 2模块,如下所示:

@Module(includes = {
        AddonModule.class,
        VersionModule.class,
        AboutModule.class}
)
public class CoreModule {
}
Run Code Online (Sandbox Code Playgroud)

我是否正确地认为在所有应用程序代码所在的Android gradle模块中,我应该能够将该模块包含在Component中,然后Component可以@Inject从CoreModule中列出的所有模块中获取任何内容?

目前我从这些组件中得到编译错误,表明他们注入的文件正在"询问"一个不在模块中的完全不同的类.

例如,我有一个注入GitHubActivity的GitHubComponent并尝试使用@Inject注释GithubService注入,但是编译器抛出了这个类试图注入另一个类的错误...那不是提到目标文件中的任何位置.我已经试着去试试这个错误,但是我没有看到它出错的地方.

我在这方面找不到任何文件.包含部分实际上做了什么?我使用它是否正确,因此错误在其他地方?

android dependency-injection module dagger-2

12
推荐指数
1
解决办法
7254
查看次数

Vue + Jest 全局配置转移到规范文件中

我正在使用 VueJS 和 Jest 对我的组件进行单元测试。

我还使用 Bootstrap Vue 库进行样式设置。我需要在 Jest 测试中使用此插件,以删除一些有关未知插件的控制台警告。

我已经创建了一个安装文件,如下所示:

import { createLocalVue } from '@vue/test-utils'
import BootstrapVue from 'bootstrap-vue'

const localVue = createLocalVue()

localVue.use(BootstrapVue)
Run Code Online (Sandbox Code Playgroud)

并将 Jest 配置为在每次测试之前使用它。

setupFiles: ['<rootDir>/tests/unit/setup']
Run Code Online (Sandbox Code Playgroud)

但是,要从控制台中删除警告,我需要localVue在安装组件时使用该实例:

const wrapper = shallowMount(MyComponent, {
      localVue,
      propsData: { value: 'someVal }
    })
Run Code Online (Sandbox Code Playgroud)

但是,我无法看到将localVue创建的实例放入setup.js测试规范文件中。

如果我这样做:

import Vue from 'vue'
import BootstrapVue from 'bootstrap-vue'

Vue.use(BootstrapVue)
Run Code Online (Sandbox Code Playgroud)

它工作正常,但这很糟糕,因为我们不应该在 Jest 测试中使用 Global Vue 实例。

有没有办法做我想做的事情,或者我是否必须在每个测试文件中构建 Bootstrap Vue 插件(以及其他插件......)?

javascript unit-testing vue.js jestjs vue-test-utils

5
推荐指数
1
解决办法
2170
查看次数

改造2,GSON和自定义解串器

我一直在使用Retrofit 2和一些POJO对象一段时间了.这是一个可爱的图书馆,工作得很好,但它需要一些我想要摆脱的可怕和混乱的模型.

我会告诉你......我有以下JSON来仔细阅读:

    {
    "things": [
        {
            "thing": {
                "id": 823,
                "created_at": "2016-02-09T22:55:07.153Z",
                "published_at": "2016-02-10T19:23:42.666Z",
                "downloads": 16073,
                "size": 10716291
            }
        },
    ],
    "count": 4,
    "links": {}
    }
Run Code Online (Sandbox Code Playgroud)

使用POJO Schema生成器会创建不必要的类,这使得难以维护代码.

这将创建:

Things.java
    @SerializedName("things")
    @Expose
    public List<Things_> things = new ArrayList<>();
Things_.java
    @SerializedName("thing")
    @Expose
    private Thing__ thing;
Things__.java
    // Insert normal variables and getter/setters here
Run Code Online (Sandbox Code Playgroud)

我已经减少了一点,因为它只是为了这个想法.在我的使用中,我当然重命名了这些类,使它们更容易管理.但我认为有一种方法可以简单地跳过Thing和Thing_并允许我只返回一个实际模型数据列表(Thing__),这两个类可以删除,而"Thing__"可以简单地为"Thing".

我是正确的.Gson允许自定义反序列化,让我实现这一目标.我把一个快速的反序列化器组合在一起并使用了一个合适的TypeToken

    Gson gson = new GsonBuilder()
            .registerTypeAdapter(new TypeToken<ArrayList<Thing>>(){}.getType(), new AddonDeserializer())
            .create();

    List<Thing> model = gson.fromJson(jsonString, new TypeToken<ArrayList<Thing>>(){}.getType());
Run Code Online (Sandbox Code Playgroud)

果然,通过上面那个确切的Json给我一个可用的东西列表.

输入Retrofit 2!将registerTypeAdapter()添加到我的Retrofit 2实例(通过我的gson实例)后,我现在收到一条错误消息:

 Expected BEGIN_ARRAY but was BEGIN_OBJECT …
Run Code Online (Sandbox Code Playgroud)

android gson deserialization retrofit

3
推荐指数
1
解决办法
5764
查看次数

Symfony 4、Doctrine 和 AWS RDS 只读副本使用

我即将开始使用具有主读/写和从只读设置的 RDS。

我已经阅读了 Doctrine MasterSlaveConnection 类型。

但是,我会创建一些我想使用只读副本的端点(我的大多数 GET 端点),有些需要写入数据(PUT、PATCH、DELETE 端点)。

我也在使用 API 平台。

在 Symfony 4 和 Doctrine 2 中实现这一目标的最佳方法是什么?

php doctrine symfony doctrine-orm

3
推荐指数
2
解决办法
1725
查看次数

Symfony 4 Doctrine EventSubscriber 未使用

尝试注册 Doctrine EventSubscriber 但实际上没有任何内容被触发。

我已在相关实体上设置了注释@ORM\HasLifeCycleCallbacks

这是订阅者:

<?php

namespace App\Subscriber;

use App\Entity\User;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Events;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class UserPasswordChangedSubscriber implements EventSubscriber
{
    private $passwordEncoder;

    public function __construct(UserPasswordEncoderInterface $passwordEncoder)
    {
        $this->passwordEncoder = $passwordEncoder;
    }

     public function getSubscribedEvents()
    {
        return [Events::prePersist, Events::preUpdate, Events::postLoad];
    }

    public function prePersist(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();

        if (!$entity instanceof User) {
            return null;
        }

        $this->updateUserPassword($entity);
    }

    public function preUpdate(PreUpdateEventArgs $event)
    {
        $entity = $event->getEntity();

        if (!$entity instanceof User) {
            return …
Run Code Online (Sandbox Code Playgroud)

events doctrine subscriber symfony

1
推荐指数
1
解决办法
6544
查看次数