标签: circular-dependency

是否可以在程序集级别启用Visual Studio中的循环依赖项?相互依赖的组件是否可能?

这听起来像是一个愚蠢的问题,但无论如何我都会试一试.

因此在Visual Studio中,您不能有两个项目X和Y,以便X引用Y和Y引用X.

总的来说,由于各种原因,我完全可以理解循环依赖是如何产生问题的.

但是,以这种方式编译两个相互依赖的项目真的不可能吗?在我看来,它必须是可能的,因为(在我的脑海-也许我完全关闭基地这个)有两个互相依赖的组件真的不是那么由具有两个相互依存类不同-它的情况合法的,可以编译.

如果你说,"两个程序集不能相互依赖,因为编译器无法在另一个程序集之前编译",这对我来说是有意义的; 除了看起来你可以为同一个程序集中的两个类创建相同的参数,显然编译器可以很好地处理这个场景.

基本上我问的原因并不是我有一些绝望的愿望去做这件事,我知道这通常是不明智的.具体来说,我想知道,因为如果我可以有两个项目 - 比如MyProjectCS和MyProjectVB - 基本上作为单个单元的两个相互依赖的部分存在,并且只是分开因为某些部分是用C#编写的,这将是很好的.其他部分都是用VB.NET编写的.

所以,我的问题是(yikes,three-fold):

  1. 是否可以启用此行为(在Visual Studio中或其他地方)?
  2. 如果在任何IDE中都不可能,至少在理论上是否可行,或者可能存在相互依赖的程序集?
  3. 如果它在理论上甚至不可能,为什么不呢?换句话说,相互依赖的程序集与单个程序集中的相互依赖的代码有何不同?

.net c# vb.net circular-dependency visual-studio

15
推荐指数
2
解决办法
6201
查看次数

Xcode ios未知的类型名称?

我有一个关于以下错误的问题" Unknown type name VistaDereIzq"

我有一个叫做的观点VistaDereIzq.我执行以下操作以在此视图中添加该视图.

#import <UIKit/UIKit.h> 
#import <MessageUI/MessageUI.h>
#import "VistaDereIzq.h"
#import "ViewController.h"

@interface VistaNavegador : UIViewController  <UIWebViewDelegate>
{ 
    VistaDereIzq *VistaIzq2;   <----- "Unknown type name VistaDereIzq"
}

@end
Run Code Online (Sandbox Code Playgroud)

xcode class circular-dependency forward-declaration ios

15
推荐指数
1
解决办法
2万
查看次数

循环C++标题包含

在一个项目中,我有两个类:

// mainw.h

#include "IFr.h"
...
class mainw
{
public:
static IFr ifr;
static CSize=100;
...
};
Run Code Online (Sandbox Code Playgroud)

// IFr.h

#include "mainw.h"
...
class IFr
{
public float[mainw::CSize];
};
Run Code Online (Sandbox Code Playgroud)

但我无法编译此代码,在该static IFr ifr;行收到错误.是否禁止这种交叉包含?

c++ static circular-dependency include

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

ruby:如何正确要求(避免循环依赖)

今天我遇到了一个奇怪的问题:模块上出现"遗漏方法"错误,但方法就在那里,并且需要定义模块的文件.经过一番搜索,我找到了一个循环依赖,其中2个文件需要彼此,现在我认为ruby默默地中止循环要求.


编辑开始:示例

文件'a.rb':

require './b.rb'

module A
    def self.do_something
        puts 'doing..'
    end
end
Run Code Online (Sandbox Code Playgroud)

文件'b.rb':

require './a.rb'

module B
    def self.calling
        ::A.do_something
    end
end

B.calling
Run Code Online (Sandbox Code Playgroud)

执行b.rb给出b.rb:5:in 'calling': uninitialized constant A (NameError).对于两个文件都必须存在这些要求,因为它们要从命令行自行运行(我省略了该代码以保持简短).所以B.calling必须在那里.一种可能的解决方案是将需求包装起来if __FILE__ == $0,但这似乎不是正确的方法.

编辑结束


避免这些难以发现的错误(顺便说一下,如果要求抛出异常会不会更好?),是否有一些关于如何构建项目的指导方针/规则以及在哪里需要什么?例如,如果我有

module MainModule
  module SubModule
    module SubSubModule
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我应该在哪里需要子模块?所有在主要的,或只有主要的sub和sububub中的sub?

任何帮助都会很好.

摘要

在forforfs的回答和评论中讨论了为什么会发生这种情况的原因.

到目前为止,最佳实践(如lain指出或暗示)似乎如下(如果我错了,请纠正我):

  1. 将顶级命名空间中的每个模块或类放在以模块/类命名的文件中.在我的例子中,这将是一个名为'main_module.rb'的文件.如果有子模块或子类,则创建一个以模块/类命名的目录(在我的示例中为目录'main_module',并将子类/子模块的文件放在那里(在示例1中名为'sub_module.rb'的文件中)对命名空间的每个级别重复此操作.
  2. 需要一步一步(在示例中,MainModule将需要SubModule,Submodule并将需要SubSubModule)
  3. 将"运行"代码与"定义"代码分开.在运行代码中需要一次您的顶级模块/类,因此2.由于您的所有库功能现在都应该可用,并且您可以运行任何已定义的方法.

感谢所有回答/评论的人,这对我帮助很大!

ruby dependencies circular-dependency dependency-management

14
推荐指数
2
解决办法
1万
查看次数

如何在Python 3.7+中定义循环相关的数据类?

假设class A有一个类型为的成员class B,并且class B有一个类型为的成员class A.

在Scala或Kotlin中,您可以按任何顺序定义类,而不必担心在这种情况下,因为第一个定义的类可以像往常一样使用第二个定义的类,即使在case/data类中也是如此.

但是在Python中,以下代码

class A:
    b = B()

class B:
    a = A()     
Run Code Online (Sandbox Code Playgroud)

抛出编译错误,因为class B在定义时class A未定义.

你可以解决这个简单的案例,就像在这个答案中一样

class A:
    pass

class B:
    a = A()

A.b = B()
Run Code Online (Sandbox Code Playgroud)

但是,这种方式对Python中的数据类不起作用,因为在定义数据类之后分配成员不会更新数据类的自动生成方法,这使得"数据类"的使用变得无用.

@dataclass
class A:
    b: B  # or `b: Optional[B]`

@dataclass
class B:
    a: A  # or `a: Optional[A]`
Run Code Online (Sandbox Code Playgroud)

我该如何避免这个问题?

python circular-dependency python-3.x python-dataclasses

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

循环依赖解决方案

我们当前的项目遇到了循环依赖问题.我们的业务逻辑程序集使用SharedLibrary程序集中的类和静态方法.SharedLibrary包含一大堆辅助函数,例如SQL Reader类,枚举器,全局变量,错误处理,日志记录和验证.

SharedLibrary需要访问Business对象,但Business对象需要访问SharedLibrary.旧开发人员通过复制共享库中的业务对象的功能(非常反DRY)来解决这种明显的代码味道.我花了一天时间试图阅读我解决这个问题的选择,但我已经走到了尽头.

我对架构重新设计的想法持开放态度,但这只是最后的手段.那么如何才能拥有可以访问业务对象的共享助手库,业务对象仍然可以访问共享助手库?

.net c# architecture design-patterns circular-dependency

13
推荐指数
1
解决办法
2万
查看次数

AngularJS循环依赖

我正在制作一个记录器服务,通过将错误(或调试,如果启用)保存到indexedDB数据库中来扩展angular的$ log服务.这是代码:

angular.module('appLogger', ['appDatabase'])

.service('LogServices', function($log, Database) {

    // ...

    this.log = function(type, message, details) {
        var log = {};
        log.type = type
        log.context = this.context;
        log.message = message;
        log.dateTime = moment().format('YYYY-MM-DD HH:mm:ss');
        log.details = details || '';
        $log[type.toLowerCase()](log);

        if (type === 'ERROR' || this.logDebug) {
            Database.logSave(log);
        }
    };

    // ...
})
Run Code Online (Sandbox Code Playgroud)

这是按照预期在我的服务中工作.现在的问题是我无法在数据库服务中使用我的记录器,因为它会抛出循环依赖性错误.我理解这个问题,但我不知道如何解决它...我应该如何解决这个问题?

谢谢你的帮助:-)

circular-dependency angularjs

13
推荐指数
1
解决办法
2万
查看次数

在C#中,如何找到循环依赖链?

当一个部署项目包含第二个部署项目的项目输出,而第二个项目包含第一个项目的输出时,通常会发生此错误.

我有一个检查循环依赖的方法.在输入中,我们有一个包含,例如,一个词典<"A", < "B", "C" >><"B", < "A", "D" >>,这意味着,A取决于BC,我们有与循环依赖A->B.

但通常情况下我们会遇到更复杂的情况,并且存在一系列依赖关系.如何修改此方法以查找依赖链?例如,我想要一个包含chain的变量A->B->A,而不是类A与class有冲突B.

private void FindDependency(IDictionary<string, IEnumerable<string>> serviceDependence)
Run Code Online (Sandbox Code Playgroud)

c# circular-dependency

13
推荐指数
2
解决办法
5068
查看次数

循环进口地狱

Python是非常优雅的语言.好吧,除了......除了进口.我仍然无法以对我来说似乎很自然的方式工作.

我有一个MyObjectA存档的类mypackage/myobjecta.py.该对象使用了一些实用程序函数mypackage/utils.py.所以在我myobjecta.py写的第一行:

from mypackage.utils import util_func1, util_func2
Run Code Online (Sandbox Code Playgroud)

但是一些实用程序函数创建并返回新的实例MyObjectA.所以我需要写utils.py:

from mypackage.myobjecta import MyObjectA
Run Code Online (Sandbox Code Playgroud)

好吧,不,我不能.这是一个循环导入,Python将拒绝这样做.

关于这个问题,这里有很多问题,但似乎都没有给出令人满意的答案.从我在所有答案中可以阅读的内容:

  1. 重新组织你的模块,你做错了!但即使在我提出的这么简单的情况下,我也不知道如何更好地组织我的模块.
  2. 尝试import ...而不是from ... import ... (我个人不喜欢编写并可能重构所有全名限定符;我喜欢看看我从外部世界导入到模块中的确切内容).那会有帮助吗?我不确定,还有循环进口.
  3. 在你使用其他模块的东西之前,做一些黑客就像在函数体的内部范围中导入一些东西.

我仍然希望有解决方案4)这将是Pythonic在功能和优雅,简单和工作的意义上.或者没有?

注意:我主要是一个C++程序员,上面的例子通过包含相应的标题很容易解决,我不相信它在Python中是不可能的.

python import circular-dependency

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

Xcode 10框架依赖循环与自身

在Xcode 10上,当我进行增量构建时,我正在使用我的一个框架获得此构建错误(clean build work):

Showing All Messages
:-1: Cycle inside LoggingSharedFramework; building could produce unreliable results.
Cycle details:
? Target 'LoggingSharedFramework' has a command with output 'blablabla/Build/Products/Debug-iphonesimulator/LoggingSharedFramework.framework/LoggingSharedFramework'
? Target 'LoggingSharedFramework' has link command with output 'blablabla/Build/Intermediates.noindex/blablablah/Debug-iphonesimulator/LoggingSharedFramework.build/Objects-normal/x86_64/LoggingSharedFramework'
Run Code Online (Sandbox Code Playgroud)
  • 该框架没有目标依赖项
  • 标题阶段在编译源之前
  • 我已经浏览了每个文件,并确保在LoggingSharedFramework之外没有导入文件(除了Cocoa之外)
  • 我没有使用任何依赖管理系统(例如carthage),因为没有外部依赖.该框架在项目中维护

这个错误对我没有意义.实际原因是什么?我怎样才能弄清楚是什么引入了这个循环?我该如何修复周期?

xcode circular-dependency ios xcode10

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