문제

내가 사용하는 유니티 IOC 컨테이너 및 나는 그냥 무엇인지 궁금 최고의 가장 좋은 방법에 대한 컨테이너에 액세스할 수 있는 여러 클래스입니다.

해야 하는 모든 클래스가 IUnityContainer 회원이 다음을 통과하는 컨테이너에 의해 생성자?이 있는 단일 클래스 IOC 컨테이너?

는 방법에 대 asp.net 개발은 무엇입니까?

누가 나를 안내서 오른쪽 방향으로 가야합니까?감사합니다.

도움이 되었습니까?

해결책 2

IOC 컨테이너를 프로세스에서 최고 수준 / 진입 점에 놓고이를 사용하여 그 아래의 모든 것에 종속성을 주입하십시오.

다른 팁

이럴 때 하는 것이 바람직하지 않을 주입 전체 컨테이너 클래스는 응용 프로그램을 가지고하는 넓은 정적 IoC 서비스입니다.

당신이 원하는 것을 볼 수 있에서 생성자의 클래스(을 수 있는 Foo),어떤 종류의 서비스/객체를 사용하는 일을 끝낸다.이 향상됩니다 명확성,테스트 기능과 degubability.

말할 수 있습 Foo 만 전자 메일 서비스,그러나 나는 통과 전체에서 컨테이너와 어딘가에서 코드의 이메일 서비스가 해결에서 컨테이너입니다.이 경우에는 것은 매우 어려운 것입을 따릅니다.대신 그것은 더 나은 주입하의 이메일 서비스를 직접 상태 Foo 의 종속성을 명확하다.

는 경우 Foo 요구하는 여러 인스턴스를 만들의 이메일 서비스,그것은 더 나은 만들기와 주사는 EmailServiceFactory(via IoC container),을 만들 것입니다 필요한 인스턴스입니다.

후자의 경우에,Foo 의 종속성을은 계속해서 나타나는 가능한 한 구체적으로만 사는 것이,EmailServiceFactory 만들 수 있습니다.나는 주사는 전체 콘테이너,그것은 것이 명확하지 않을 어떤 서비스를 제공 그것은 Foo 의 정확한 종속성입니다.

면 지금,나는 나중에 제공하려는 다른 인스턴스의 이메일 서비스,나는 그것을 밖으로 스왑 내부 EmailServiceFactory.나는 교환할 수 있었 전체 공장을 뿐만 아니라,모든 서비스를 만들 필요가 될 교환(예:테스트 기간 동안).

도의 비용으로 하나를 만드는 여분의 클래스(factory)내가 많은 깔끔한 코드고 걱정할 필요가 없에 대한 호기심이 버그를 발생할 수 있는 경우 글로벌 정적이 사용됩니다.또한 공급할 때 조롱에 대한 테스트,어떻게 조롱 그것은 필요 없을 모의 전체 컨테이너의 유형입니다.

또한 이러한 접근 방식은 장점을 가지고 있는 이제 모듈을 초기화(만 적용됩 프리즘/모듈형)지 않을 등록해야의 모든 종류의 개체 공급 IoC 컨테이너입니다.대신 그것은 단지 등록 ServiceFactory 는 다음을 공급하는 해당 개체.

을 명확 모듈의 초기화 클래스(를 구현하 IModule)해 여전히 나타나는 응용 프로그램 전 IoC 컨테이너에서 그것의 생성자를 위해서는 공급하는 서비스에서 사용되는 다른 모듈이지만,컨테이너지 침입으로 모듈의 클래스입니다.

마지막으로,어떻게 우리가 여기는 또 다른 좋은 방법의 예는 추가 계층 간접 해결 문제입니다.

컨테이너 자체를 등록하고 다른 모든 종속성 속성과 같이 주입 할 수 있습니다.

IUnityContainer container = new UnityContainer();
container.RegisterInstance<IUnityContainer>(container);

액세스 해야하는 클래스는 다음 속성을 갖습니다.

private IUnityContainer unityContainer;
[Dependency]
public IUnityContainer UnityContainer
{
    get { return unityContainer; }
    set { unityContainer = value; }
}

따라서, 컨테이너는 해당 클래스의 인스턴스가 해결/구축 될 때마다 주입됩니다.

동일한 응용 프로그램 내의 여러 컨테이너에 대해 작동하므로 싱글 톤 패턴에서는 불가능합니다.

모든 객체에 컨테이너에 대한 참조가 필요한 경우 코드를 다시 작업해야합니다. 여전히 모든 곳에서 새로운 것을 호출하는 것이 바람직하지만 여전히 코드 전체에서 객체 그래프를 구축 할 책임이 있습니다. 그런 종류의 사용으로 IOC 컨테이너 대신 Servicelocator처럼 더 많이 사용되는 것으로 저를 놀라게합니다.

또 다른 옵션은 CommonservicElocator, 무의미한 간접 일 수도 있지만 ServiceLocator.Current 모든 클래스에서 알려진 사례로

이 주제에 대한 내 블로그에 T3mujin 답변을 따라 무언가를 사용하고있는 게시물이 있습니다. 자유롭게 사용하십시오 (SharePoint와 관련된 것을 귀찮게하지 마십시오 ... 중요하지 않습니다) :

http://johanleino.spaces.live.com/blog/cns !6be273c70c45b5d133.entry

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top