Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模式来定义类之间的依赖关系,以及它们必须初始化的顺序_C#_Design Patterns - Fatal编程技术网

C# 模式来定义类之间的依赖关系,以及它们必须初始化的顺序

C# 模式来定义类之间的依赖关系,以及它们必须初始化的顺序,c#,design-patterns,C#,Design Patterns,我有一个加载过程,它需要根据加载对象所属的类,按特定顺序初始化加载对象。有些类持有对其他类的引用,并且依赖于那些首先初始化的其他类 现在,我在每个类中用一个静态数字字段定义顺序。程序员负责提出数字值。然后,我可以按照这个数字对对象进行排序,并按照正确的顺序初始化它们 public interface ILookUpCollectible { // this is the number the classes get sorted by before initializing

我有一个加载过程,它需要根据加载对象所属的类,按特定顺序初始化加载对象。有些类持有对其他类的引用,并且依赖于那些首先初始化的其他类

现在,我在每个类中用一个静态数字字段定义顺序。程序员负责提出数字值。然后,我可以按照这个数字对对象进行排序,并按照正确的顺序初始化它们

public interface ILookUpCollectible
{     
    // this is the number the classes get sorted by before initializing
    int LoadPostProcessOrder { get; }    
}


 // start initializing, sort them first
 // sort:
        var sortedList = list.OrderBy(l => l.LoadPostProcessOrder);

        int i = 0;
        foreach (var item in sortedList) 
        {
            item.LoadPostProcess(sn);
            i++;              
        }

有更好的方法吗?我希望每个类都明确指出它所依赖的其他类(通常是因为它包含对这些类的引用),然后从中派生顺序。

这些类彼此之间是否有静态引用?听起来你想把它们变成实例,让依赖项显式的构造函数参数。很多IoC/DI容器可以像这样构造对象,自动发现依赖项并将它们注入构造函数,看起来你需要的是一个DI容器,比如Unity(或任何其他容器)。如果这是您的意思,则类/对象可以通过全局静态集合相互引用。您是否可以将类视为父类和子类?在这种情况下,每个对象的初始化都有最后一行
InitializeChildren()
。在这个例程中,您有一个循环,它遍历同一级别的所有子级,以启动它们的初始值设定项。因此,您将触发整个层次结构的初始化级联。。。