2014-01-29 91 views
3
public interface ISomeDependency 
    { 
    void Calculate(Person person); 
    } 
    public class SomeDependency : ISomeDependency 
    { 
    void ISomeDependency.Calculate(Person person) 
    {   
     person.Age = 30; 
    } 
    } 

    public class Person 
    { 
    private static ISomeDependency _someDependency; 
    public DateTime BirthDate { get; set; } 
    public int Age { get; set; } 
    public Person(ISomeDependency someDependency) 
    { 
     _someDependency = someDependency; 
    } 
    public void CalculateAge() 
    { 
     _someDependency.Calculate(this); 
    } 
    } 
    public class Client 
    { 
    public Client() 
    { 
     Person p = new Person(new SomeDependency()); 
     p.BirthDate = DateTime.Now.AddYears(-30); 
     p.CalculateAge(); 
    } 
    } 

爲什麼要關注依賴關係是否是靜態的?一般來說,這很重要嗎?私有靜態依賴vs私有依賴

+0

這取決於是否所有的Person對象共享相同的依賴實現與否。如果他們這樣做了,也許它應該是靜態的,但IMO,它不應該傳遞給'Person'的構造函數,因爲這意味着它是非靜態的。 –

+0

注入一個靜態字段沒有多大意義,除非你只能保證一個實例(Singleton)。 – crush

回答

1

如果依賴關係是靜態的或者沒有關係,爲什麼要重要?一般來說,這很重要嗎?

是 - 你的情況,你所具有的選擇重置靜態成員的構造函數,所以靜態成員的值將是最後的構造被賦予值。

由於沒有理由使依賴靜態,我可以看到(你沒有靜態方法/使用它的屬性)它應該罰款一個實例(非靜態)字段。

+1

我會補充說它也不是線程安全的。構造一個對象不應該影響同一個類的其他實例的線程安全性。 – crush

1

如果_someDependency是靜態的,它將被存儲在高頻率的堆中,否則它會轉到低頻率的堆。