저는 제어 할 수없는 응용 프로그램과 함께 배포 될 클래스 라이브러리 (C#)를 작성하고 있습니다. 내 라이브러리도 보안에 민감하기 때문에 호출하는 앱이 클래스 라이브러리의 종속성을 구성하는 것을 원하지 않습니다. 독립적이어야하고 자체 의존성을 초기화해야합니다.클래스 라이브러리 내에서 IoC 컨테이너를 초기화하는 좋은 전략은 무엇입니까?
동시에 단위 테스트가 가능하고 느슨하게 결합되기를 원하며 IoC 컨테이너를 사용하여 종속성을 관리하려고합니다. 지금은 내부 생성자와 [InternalsVisibleTo()]
을 사용하고 있으므로 단위 테스트에서 수동 주입을 할 수 있습니다. 나는 IinC 컨테이너로 Ninject를 사용하는 것을 선호하지만 이는 그 질문과 관련이 없다.
내가 클래스 라이브러리가 정말 정의 진입 점을 가지고 있지 않기 때문에, 생산에서 내 IoC 컨테이너를 초기화하기위한 좋은 전략을 마련하기 위해 사투를 벌인거야, 그것은 인스턴스화 할 수있는 클래스의 번호를 가지고 앱이 먼저 사용할 앱을 알 수있는 방법이 없습니다.
이AssemblyLoad
이벤트의 어떤 종류의, 그리고 실제로
AppDomain
이 같은 이벤트를 갖고있는 것 같아요,하지만 난 심지어로 연결할 수 있습니다 전에 내 어셈블리가 이미 응용 프로그램 도메인에로드되어 있어야합니다, 그래서 항상 것 수 있다면 궁금
내 자신의 의회가 올려 놓은 사건을 놓치지 마라. 정적 이니셜 라이저 또는 생성자 사용에 대해서도 생각했지만 IoC 컨테이너 설정이 가능한 모든 클래스를 오염시키지 않는 이유는 컨테이너에 밀접하게 결합되어 있기 때문입니다. IoC 컨테이너에 연결하기 위해서만 코드를 디커플링하고 싶지는 않습니다.
이 주제에 관해 논의한 몇 가지 다른 질문을 찾았지만 그 중 아무도 내 상황을 다루지 않았습니다. 하나는 정적 이니셜 라이저를 사용하는 것이 좋습니다. 다른 하나는 응용 프로그램이 항상 구성 루트가되어야한다고 제안하는 것입니다.
다른 방법이 있습니까?
고객이 구현물을 얻기 위해 Ninject를 사용합니까? 그렇지 않다면, 어떻게 Ninject를 사용하여 수업에 어떤 것을 주입 할 계획입니까? –
내 소비자가 Ninject를 사용하거나 사용하지 않을 수도 있습니다. 잘 모르겠습니다. 내 클래스 라이브러리는 NuGet 패키지로 소비 될 것이므로 해당 수준의 Ninject에 의존 할 것입니다. –