나는 사용자가 명시 적으로 지정하지 않은 앱 설정에 대한 기본값으로 사용되는 일련의 문자열을 캡슐화하는 클래스가 있습니다. 이러한 문자열 이후의존성 주입을 사용할 때 일반적으로 정적 인 클래스를 어떻게 디자인합니까?
class SiteConfigurationConventions : ISiteConfigurationConventions
{
public String GetConfigurationFileName()
{
return "SiteConfiguration.xml";
}
}
static
클래스 (System.Math
을 같은) 더 개념적으로 적합 할 것으로 보인다 나는 현재 관련 되 - 명명 된 인스턴스 방법-이있는 평범한 구식 클래스 물건의 종류를 사용하고
런타임에 변경되지 않으며 필드가 필요하지 않지만 호환 가능한 정적 클래스가 DI와 얼마나 유사한 지 잘 모르겠습니다. 예를 들어 컨테이너에 정적 클래스를 등록 할 수없는 것처럼 보이므로 컨테이너가 다른 객체에서 컨테이너를 확인하도록 생성자에게 반환합니다.
는 지금, 나는 등록
container.RegisterType<ISiteConfiguration, SiteConfiguration>();
요청 생성자가 필요한 것을 얻을 수 있도록 :
public SiteGenerator(ISiteConfiguration siteConfiguration)
내 디자인 옵션이 될 것 같다 :
- 리팩터링 정적 클래스에 그리고 생성자 주입을 사용하는 것보다 내 소비 클래스에서 직접 concrete 유형을 참조하십시오.
- 그대로 (클래스 및 인스턴스가 인터페이스로 확인 됨) 정확성을 위해 싱글 톤 수명을 사용하여 등록하십시오.
- 정체를 숨기기 위해 외관이나 공장을 만들었습니다. 그러나, 어떤 이유로이 옵션은 나를 어리석게 만듭니다.
이 같은 클래스의 개념은 홀수 스태틱이 개념적으로 정확하다고 보입니다. 내가 그것을 인스턴스화 가능한 클래스로 만드는 유일한 이유는 DI를 더 친숙하게 만드는 것입니다. 그 소리는 괜찮은가요? 아니면 정확합니까? 내가 뭔가를 놓친 건가?
모든 변호인에게 감사드립니다. :)
정적 클래스를 인스턴스화 할 수 없으므로 new 연산자를 사용하는 구문이 제대로 작동하지 않습니다. –
죄송합니다. 명확하지 않았습니다. 클래스를 비 정적으로 설정하고 DI 컨테이너를 사용하여 처리하도록했습니다. –
아, 좋아. 귀하의 게시물은 나에게 훨씬 더 의미가 있습니다. :) 오리지널 오해에 대해 유감스럽게 생각합니다. –