저는 현재 코어 어셈블리와 winforms 어셈블리로 구성된 작은 C# 응용 프로그램을 만들고 있습니다. 나는 아마 이런 작은 일에 Ninject가 필요 없다는 것을 알지만, 그것을 시험해보고 싶다.C#, Ninject : 커널과 모듈은 어디에 두어야합니까?
어쨌든, Ninject로 작업하려면 모듈 집합을 작성하고 클래스가 반환되는지도 등을 이해해야합니다. 그런 다음 IKernel
의 인스턴스를 만들고 모듈을로드합니다.
하지만 모듈을 어디에 보관해야합니까? 그리고 커널은 어디에 보관합니까? 물건은 어디로 간다?
저는 이것을 수행 할 수있는 표준 방식을 찾고 있었으며 "훌륭합니다!"라고 생각했습니다. 내가 너를봤을 때. 나쁜 소식, 그 코드는 TERRIFICALLY UNTHREADSAFE입니다. 만약 내가 싱글 톤으로 커널을 포장해야한다면, 안전한 방법 (힌트, 정적 생성자)으로 직접 할 수는 있지만, 미래에 올 모든 사람들에게 경고해야한다. 그 기사는 thread-safe하지 않은 구현이다. –
@JimmyHoffa 스레드가 안전하지 않다는 것에 동의합니다 (http://csharpindepth.com/articles/general/singleton.aspx에서 원하는 방식으로 적용하는 것이 좋습니다). 하지만 그보다 훨씬 나은 점은 그림의이 스레드 안전성 (다른 문제들)에 대한 필요성을 초기화가 발생할 수있는 명확한 장소가있는 컴포지션 루트를 갖는 것입니다. 완전히. –
컴포지션 루트에 익숙하지 않지만 커널에 액세스 할 수 없으면 생성자를 주입 할 객체를 어떻게 요청합니까? 당신의 UI에서'UserManager'에 접근하기를 원합니다.'UserManager'는 생성시'IUserRepository'를 취합니다; 어떻게 커널에 접근하지 않고 (서비스 위치 지정자와 같은 것을 통해)'UserManager'를 얻었습니까? 당신은 단지'새로운 UserManager (???);'와'옳은 일이 생성자에게 넘겨지기를 기대할 수 있습니까? –