[英]How to initialize a static property before initializing a static class?
Class2
下面有一個需要在GetSomething
之前設置的屬性,但是因為我訪問Class1
頂部的Class2
,當它到達Something
類時,該屬性總是為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 Class2() {
SomeDependency = SomeDependencyYouNeed;
}
你為什么使用靜態方法? 看起來你正在嘗試一種依賴注入。 創建Class2的實例並在構造函數中傳遞依賴項(並且不使用靜態方法),或者將依賴項作為GetSomething()方法的參數傳遞。
public static GetSomething(string something, ISomeDependency dependency).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.