2014-01-29 3 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(); 
    } 
    } 

종속성이 정적인지 여부는 중요한 이유는 무엇입니까? 일반적으로 중요합니까?개인 정적 종속성과 개인 종속성

+0

모든 'Person' 개체가 동일한 종속성 구현을 공유하는지 여부에 따라 다릅니다. 만약 그렇다면, 정적 일 것이지만, IMO,'Person'의 생성자에 넘겨서는 안됩니다. 왜냐하면 그것이 정적이 아니라는 것을 의미하기 때문입니다. –

+0

정적 필드를 주입하는 것은 단일 인스턴스 (싱글 톤) 만 보장 할 수 없다면 큰 의미가 없습니다. – crush

답변

1

종속성이 정적인지 여부는 중요한 이유는 무엇입니까? 일반적으로 중요합니까?

예 - 정적 멤버의 값이 마지막 생성자가을 받았다 하는 가치가 될 것입니다 귀하의 경우에 당신은 정적 멤버를 재설정하는 것 인스턴스 생성자가 있습니다.

종속성을 볼 수있는 고정 된 (정적 메소드/사용하는 속성이 없음) 인스턴스 (정적이 아닌) 필드가 좋아야합니다.

+1

스레드 안전도 없다고 덧붙입니다. 객체의 생성은 같은 클래스의 다른 인스턴스의 스레드 안전성에 영향을 주어서는 안됩니다. – crush

1

_someDependency가 정적 인 경우 고주파수 힙에 저장됩니다. 그렇지 않으면 저주파 힙으로 이동합니다.