2

아마도이 질문은 너무 광범위 할 수 있습니다. 그러나 나는 여전히 최선의 관행과 '올바른 것'이 무엇인지 듣고 싶습니다. 유사한 주제를 찾지 못했을 것입니다. 아마 그것이 일반적인 이유와 검색의 어려움 때문일 것입니다.'기본'방법으로 무엇을 코딩해야합니까?

이 모든 것은 Windows 서비스 프로젝트를 가져 와서 다른 서비스를 추가했을 때 시작되었습니다. 이전에는 주 방법이 구성 루트으로 간주되었으며 IoC 컨테이너 등록 코드 app.config 읽기 및 유사한 방법으로 주 방법에있었습니다. 필요한 종속성을 어셈블 한 후 컨테이너에 Resolve을 호출하고 실행하여 서비스를 만들었습니다.

ServiceBase에서 상속받은 다른 클래스를 만들었을 때, 다중 서비스가 잠재적으로 완전히 다른 것이며 초기화 코드가 다르기 때문에 main을 컴포지션 루트로 사용하는 것이 더 이상 효과적이지 않은 것으로 나타났습니다.

마법사에서 발견 한 유일한 깨달음이있는 게시물은 this one from Mark Seemann이며 OnStart은 (특정 사례에서) 집계 루트가 될 것이라고 그는 말합니다.

일반적으로 적절한 구성 루트를 선택할 때 가장 좋은 방법은 무엇입니까? 나는이 윈도우 서비스 시나리오를 이상치로 간주해야하고 다른 프로젝트 유형 구성 루트와 같은 주요 방법을 떠나는 동안 다른 방식으로 코드를 작성해야합니까? 아니면 모든 컨텍스트에서 유효 할보다 일반적인 접근법이 있습니까?

아마도 서비스가 매우 다른 설정을 필요로한다는 사실은 주체가 다시 구성 루트로 사용되는 여러 독립 실행 형 프로젝트에서 구분되어야한다는 지표일까요?

일반적으로 .Net을 사용하지만 이는 다른 많은 프로그래밍 언어에도 적용됩니다.

답변

0

Main() 방법은 OS가 요구하는 단순한 고리라고 생각하는 것이 가장 좋습니다.이 방법은 유일한 책임입니다. 가능한 한 적은 코드가 있어야하며 실제 응용 프로그램을 시작하는 데 필요한 최소한의 코드 만 있어야합니다. 이는 개념적 고려 사항의 일부가 아니어야합니다.

+0

초기화 코드를 넣을 위치에 대한 제안은 무엇입니까? 예를 들어 컨테이너 설정, 로그 구성 등. 아마 작은 샘플을 만들 수 있을까요? – julealgon

+0

에 따라 다릅니다. 귀하의 경우에는 (Init() 등) 메소드를 작성하고이 메소드를 'Main()'에서 호출합니다. 그렇다면 메소드'Run()'(본질적으로 무언가를 기다리는 무한 루프)과 마침내 결국 'CleanUp()'메소드를 갖게 될 것입니다. Main은 '{Init(); 운영(); 대청소(); } '. –

+0

내가 설명한 경우에는 두 가지 독립적 인 서비스가 있음에 유의하십시오. 만약 당신이 제안한 것을한다면 나는 하나의 초기화 메소드로 그것들을 결합 할 것이고 그들 사이에 어떤 우선 순위도 둘 수 없다 : 같은 프로세스에서 두 개의 서비스가 있다고 상상해 보라. 그리고 두 번째는 첫 번째 실행에 의존한다. 첫 번째 서비스가 이미 실행되고 있지 않기 때문에 프로그램 클래스를 컴포지션 루트로 사용하면 제안 된 서비스를 제대로 초기화 할 수 없다는 것을 알 수 있습니다. – julealgon