Class2
下面有一个属性需要在调用 GetSomething
之前设置,但是因为我在 的顶部访问
该属性在到达 Class2
>Class1Something
类时始终为 null。我似乎无法弄清楚如何更改我的代码以在使用之前设置该属性。有人吗?
编辑 我想从 form1 的构造函数传递依赖关系,而不是将其硬编码到链上。
public partial class form1
{
private static readonly ISomeConstructedClass someConstructedClass = Class1.SomeConstructedClass;
public form1()
{
someConstructedClass.SomeDependency = new SomeDependency();
someConstructedClass.Whatever();
}
}
public static class Class1
{
public static readonly ISomething something = (ISomething)Class2.GetSomething("something");
public static ISomeConstructedClass SomeConstructedClass
{
get
{
return something.SomeConstructedClass;
}
}
} ....
public class Class2
{
public static ISomeDependency SomeDependency
{
get;
set;
}
public static GetSomething(string something)
{
switch(something)
{
case "something":
return new Something( SomeDependency );
}
}
}
public class Something : ISomething
{
public ISomeDependency SomeDependency
{
get;
set;
}
public Something(ISomeDependency someDependency)
{
SomeDependency = someDependency;
}
}
最佳答案
[重新]编辑:
我对您之前尝试做的事情感到困惑,您只需要先创建依赖项即可。
public partial class form1
{
private static /*readonly*/ ISomeConstructedClass someConstructedClass;
public form1()
{
Class2.SomeDependency = new SomeDependency();
someConstructedClass = Class1.SomeConstructedClass;
someConstructedClass.Whatever();
}
}
我还会将某些内容的创建移动到属性中,以确保它不会过早初始化(在调用 form1 构造函数之前)。
public static class Class1
{
public static ISomething something;
public static ISomeConstructedClass SomeConstructedClass
{
get
{
if (something == null) {
something = (ISomething)Class2.GetSomething("something");
}
return something.SomeConstructedClass;
}
}
}
您可以使用 static constructor .这在调用/访问任何静态(或与此相关的实例)字段或方法之前被调用。
类似于:
static Class2() {
SomeDependency = SomeDependencyYouNeed;
}
关于c# - 如何在初始化静态类之前初始化静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623752/