簡體   English   中英

如何在初始化靜態類之前初始化靜態屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM