标签: circular-dependency

如何打破存储库之间的循环依赖关系

首先,不是我没有使用ORM,我也不允许.我必须使用ADO.NET手动滚动我的存储库.

我有两个对象:

public class Firm
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual IEnumerable<User> Users { get; set; }
}

public class User
{
    public Guid Id { get; set; }
    public string Username { get; set; }
    public Firm Firm { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

注意彼此的引用,公司有一个用户列表,每个用户只有一个公司.

现在我想设计我的存储库:

public interface IFirmRepository
{
    IEnumerable<Firm> FindAll();
    Firm FindById(Guid id);
}

public interface IUserRepository
{
    IEnumerable<User> FindAll();
    IEnumerable<User> FindByFirmId(Guid firmId);
    User FindById(Guid id);
} …
Run Code Online (Sandbox Code Playgroud)

.net c# dependency-injection circular-dependency repository-pattern

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

使用requireJs的模块中的循环依赖关系


为了修复循环依赖关系,读取requireJs文档建议exports用于为模块创建一个空对象,该对象可立即供其他模块参考.

我尝试这个代码,但它似乎不起作用.怎么了?

PS:
阅读用于查看输出的注释,
尤其是setTimeout调用中的B模块.


// A module
define([
    'b'
], function (b) {
    console.log('B:', b); // B, Object
    var A = {
        boo: 1
    };

    return A;
});
Run Code Online (Sandbox Code Playgroud)
// B module
define([
    'a',
    'exports'
], function (a, exports) {
    console.log('A:', a); // A, undefined (as I was expecting)
    exports.A = function () {
        return a;
    }

    var B = {
        bar: 1
    };

    setTimeout(function () {
        console.log('exports.A', exports.A()); // exports.A undefined 
                                           // I would like to access …
Run Code Online (Sandbox Code Playgroud)

javascript circular-dependency dependency-management requirejs

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

Lua:如何避免循环要求

问题

在尝试执行循环要求时,如何避免Lua 5.1的以下错误?

$ lua main.lua 
lua: ./bar.lua:1: loop or previous error loading module 'foo'
stack traceback:
    [C]: in function 'require'
    ./bar.lua:1: in main chunk
    [C]: in function 'require'
    ./foo.lua:1: in main chunk
    [C]: in function 'require'
    main.lua:1: in main chunk
    [C]: ?
Run Code Online (Sandbox Code Playgroud)

文件结构

main.lua

require "foo"
require "bar"
print (Foo.getName())
print (Bar.getName())
Run Code Online (Sandbox Code Playgroud)

foo.lua

require 'bar'
Foo = {}
Foo.name = 'foo'

function Foo:getName()
    return Foo.name .. Bar.name
end
Run Code Online (Sandbox Code Playgroud)

bar.lua

require 'foo'
Bar = {}
Bar.name = 'bar'

function Bar:getName() …
Run Code Online (Sandbox Code Playgroud)

lua circular-dependency

9
推荐指数
2
解决办法
8313
查看次数

Android Gradle构建和循​​环依赖

我在IntelliJ IDEA中有一个Android项目.它由两个模块组成:app和library.应用程序依赖于库和库依赖于应用程序(是的,它不好,但我有我拥有的,不能改变这个).项目设置中的IDEA警告我循环依赖,但项目正确构建.项目结构如下所示:

project
|__app
|    |__src
|    |__build.gradle
|__libarary
|    |__src
|    |__build.gradle
|__build.gradle
|__settings.gradle
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试迁移到基于Gradle的新Android构建系统,并在这里遇到麻烦.在我的build.gradlefrom app模块中,我添加依赖library

compile project(":library")
Run Code Online (Sandbox Code Playgroud)

另外我tryed添加在依赖libraryapp

compile project(":app")
Run Code Online (Sandbox Code Playgroud)

但是当gradle试图组装库模块时,从构建系统中获取错误:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Failed to notify project evaluation listener.
   > Module version project:app:unspecified depends on libraries but is not a library itself
Run Code Online (Sandbox Code Playgroud)

在不改变项目结构的情况下,我可以做些什么

android build circular-dependency dependency-management gradle

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

生产中间歇性的"自动加载时检测到循环依赖性"错误

我有一个Rails项目,它不时地以不可重现的方式在生产中抛出此异常.一切都在开发和测试中很好用,而且显然也在生产中,但ExceptionNotifier每隔几周都会通过电子邮件向我发送此异常...

我不知道发生了什么,所以我将尽可能多地转储有关我的环境的信息,希望其中一些可以帮助排除故障.

  • Ruby 2.1.5
  • Rails 4.2.1
  • 使用常规Ruby解释器(即不是JRuby)在Heroku中运行

完整的错误是:

"Circular dependency detected while autoloading constant DeferredUpdatesHelper"
Run Code Online (Sandbox Code Playgroud)

DeferredUpdatesHelper是这样定义的模块lib/deferred_updates_helper.rb:

module DeferredUpdatesHelper
  def self.something_something(params)
  end
end
Run Code Online (Sandbox Code Playgroud)

我想不出这个模块有什么依赖.它非常简单,据我所知,它需要的是一个名为$ RedisPool的全局变量,因此不确定如何存在循环依赖...

该模块用于我的一个模型: models/user.rb

class User < ActiveRecord::Base
  def self.process_deferred_something
    DeferredUpdatesHelper.something_something(params) do
      # do stuff
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

从ActiveJob调用该方法:

class SomeJob < ActiveJob::Base
  queue_as :default

  def perform
    User.process_deferred_something
  end
end
Run Code Online (Sandbox Code Playgroud)

这是在Sidekiq流程中执行的,它每隔10分钟就会非常愉快地运行,除了偶尔我会得到其中一个......

在任何require地方都没有声明,或者至少在任何这些提到的文件中都没有声明......如上所述,在开发中一切都正常.

堆栈跟踪:

/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:492:in `load_missing_constant'
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:184:in `const_missing'
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:526:in `load_missing_constant'
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:184:in `const_missing'
/app/app/models/user.rb:93:in `process_deferred_something'
/app/app/jobs/some_job.rb:5:in `perform'
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/execution.rb:32:in `block in perform_now'
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:117:in `call'
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:117:in `call' …
Run Code Online (Sandbox Code Playgroud)

circular-dependency autoload ruby-on-rails-4

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

循环引用和构造函数

我正在尝试构建一个验证某个类型实例的属性.

为了做到这一点,我必须将其ObjectInstance转换为该类型.

我需要在该类型的成员上设置属性.

所以我们需要求助于and循环定义的关键字.

但是在下面的例子中我得到了错误

自定义属性必须调用对象构造函数

在下面标出的行上.

namespace Test

open System
open System.ComponentModel.DataAnnotations

[<AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)>]
type MyAttribute() =
    class
    inherit ValidationAttribute ()

    override this.IsValid (value: Object, validationContext: ValidationContext) =
        match validationContext.ObjectInstance with
        | :? MyClass as item ->
            // TODO more validation
            ValidationResult.Success
        | _ ->
            new ValidationResult("No no no")
    end
and MyClass(someValue) =
    [<Required>]
    [<Range(1, 7)>]
  //vvvvvvvvvvvvvvv
    [<MyAttribute>]
  //^^^^^^^^^^^^^^^
    member this.SomeValue : int = someValue
Run Code Online (Sandbox Code Playgroud)

我试着手动调用构造函数,例如:

[<MyAttribute()>]
// or
[<new …
Run Code Online (Sandbox Code Playgroud)

f# circular-dependency circular-reference

9
推荐指数
2
解决办法
294
查看次数

警告检测到循环依赖-Angular Cli

https://github.com/angular/angular-cli/pull/6813添加了关于循环依赖项的警告,我知道我可以使用“ showCircularDependencies”关闭所有警告:false。但是我宁愿保持循环依赖警告。有没有一种模式可以让我修复下面的用例,还是有一种方法可以专门禁用特定文件上的循环依赖插件?

最简单的情况是,如果我有3个文件:

表格模型

import { CustomModel } from './custom.model';
import { CustomForm } from './custom.form';

export class Forms {
  items: CustomForm[] = [];
  public constructor(models?: CustomModel[]) {
    models.forEach(model => this.items.push(new CustomForm(model)));
  }
}
Run Code Online (Sandbox Code Playgroud)

custom.model.ts

export class CustomModel {
  nestedModels: CustomModel[];    
}
Run Code Online (Sandbox Code Playgroud)

custom.form.ts

import { Forms } from './forms.model';
import { CustomModel } from './custom.model';

export class CustomForm {
  nestedForms: Forms;

  constructor(model: CustomModel) {
    this.nestedForms = new Forms(model.nestedModels);
  }
}
Run Code Online (Sandbox Code Playgroud)

这将导致以下警告:

WARNING in Circular …
Run Code Online (Sandbox Code Playgroud)

warnings circular-dependency angular-cli angular

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

当依赖关系是循环的时,如何在Startup.cs中实现依赖注入?

我有一个MyProject项目,我有实现的IMyService接口和MyServiceIMyService.在Startup.cs类中,我依赖注入它们:

// MyProject project | Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IMyService, MyService>();
}
Run Code Online (Sandbox Code Playgroud)

因为MyService有许多依赖项(对第三方等进行许多REST调用)我想为开发环境创建它的存根版本.我创建了引用MyProject的MyStubsProject.我实现了对MyStubsProject的存根版本:IMyService

// MyStubsProject project
public class MyStubService : IMyService
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以现在我想向Startup.cs类添加依赖注入:

// MyProject project | Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    if (isDevelopmentEnvironment)
        services.AddScoped<IMyService, MyStubService>();
    else
        services.AddScoped<IMyService, MyService>();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加它,MyProjectMyStubsProject之间将存在循环依赖.

我应该如何在Startup.cs中实现对类MyStubServiceMyStubsProject项目的引用?

c# dependency-injection circular-dependency .net-core

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

具有测试范围的Maven循环依赖

我们有一个ProjectB(仅主要项目,没有测试项目)依赖于ProjectA。ProjectA的测试(不是主要测试)取决于ProjectB。我们为每个项目使maven生成了两个单独的工件(主罐和测试罐)。因此,这里确实没有循环依赖,但是行家抱怨循环依赖。我想知道是否有一种方法可以告诉Maven,这实际上不是循环依赖项。

在ProjectA中,由于只有ProjectA测试依赖于ProjectB,所以我们在ProjectB的依赖项部分具有“测试”范围。

circular-dependency maven

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

Angular 4:无法实例化循环依赖!InjectionToken_HTTP_INTERCEPTORS

我知道,这个问题可能听起来很复杂,我已经尝试了在stackover流程中发现的所有内容都无法解决这个问题,所以请耐心等待

为了让你能够重现错误,我为你提供了整个代码

Github Repo

问题

我收到以下错误:

提供者解析错误:↵无法实例化循环依赖!InjectionToken_HTTP_INTERCEPTORS("[ERROR - >]"):在./AppModule@-1:-1中的NgModule AppModule中

在此输入图像描述

有关场景的信息(注释)

注1 文件:response-interceptor.service.ts

路径: ./src/app/shared/interceptors/response-interceptor/

我正在拦截HTTPClient检查401错误的响应,当错误发生时我需要让用户重新登录.

要向用户显示重新登录提示,我已经创建了global-functions-services一个具有"relogin"功能的功能

注2 文件:global-function.service.ts

路径: ./src/app/shared/services/helper-services/global-function/

这是所有这一切开始发生的地方......我一注射了 PersonService

  constructor(
    public dialog: MatDialog,
    private _personService: PersonService
  ) { }
Run Code Online (Sandbox Code Playgroud)

我收到此错误,在PersonService中我找不到任何import可能导致此问题的错误.

PersonService:
./src/app/shared/services/api-services/person/person.service.ts

import { IRequest } from './../../../interfaces/I-request';
import { environment } from 'environments/environment';
import { Injectable } from '@angular/core';

// for service
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/toPromise';

// models
import { Person …
Run Code Online (Sandbox Code Playgroud)

javascript circular-dependency angular

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