2012-04-20 2 views
4

Ninject에서 WCF로 유형을 연결하는 올바른 방법은 무엇입니까? WCF 확장과 Ninject 자체를 NuGet을 통해 WCF 프로젝트에 추가했습니다. 그러나 나는 다음에해야 할 일에 매달렸다. ServiceHostFactory 대신 global.asax를 사용하는 구식 예제가있는 것 같습니다. ServiceHostFactory 메서드가 가장 좋은 방법입니까?Ninject 및 WCF - 제어 컨테이너의 반전을 초기화하는 올바른 방법

WCF를 사용하는 Ninject 사용의 현재 가장 좋은 예는 어디입니까? Ninject WCF 확장 기능이 제공하는 객체를 사용하여 와이어 링을 수행하는 방법을 잘 모르겠습니다.

상세 정보 :
내가 통해 걸어 시도 -이 더 이상 호환 또는 최신와 현재 아니었다 생각하는 이유 https://github.com/ninject/ninject.extensions.wcf/tree/Maintenance_2.2/src/Examples/WcfTimeService

내 프로젝트는 Global.asax.cs에 NinjectWcfApplication를 해결 할 수 없습니다
입니다 Ninject.

+1

NinjectWcfApplication을 해결할 수 없을 때 어떤 오류가 발생 했습니까? – Troy

+0

"IntPtr을 활성화하는 중 오류가 발생했습니다. 일치하는 바인딩이 없습니다 ..."오류가 발생합니다. 어떻게이 문제를 해결 했습니까? –

+0

hambonius, 미안, 내가 그 조각을 풀기 위해 무엇을했는지 기억이 안납니다. 죄송합니다. – BuddyJoe

답변

2

을 만들려면의 Global.asax를 수정해야합니다. 해당 페이지를 마스터 브랜치로 전환하십시오.

+0

오류에 대한 의견 : IntPtr 활성화 오류 일치하는 바인딩을 사용할 수 없으며 해당 유형이 자동 바인딩되지 않습니다. – BuddyJoe

+0

btw, 올바른 방향으로 나를 가리켜 주셔서 고맙습니다. 위와 같은 오류를 추적 할 수 있다고 생각합니다. – BuddyJoe

+0

AppStart 폴더와 NinjectWebCommon.cs 파일이 있습니다. 이것이 NuGet에 의해 추가 되었습니까? 내 인터페이스를 다른 곳에 바인딩해야합니까? – BuddyJoe

1

나는 Ninject를 사용하지 않았지만 일반적으로 ServiceHost 구현에서 프로세스를 시작합니다. 뭔가 같은 :

public sealed class MyServiceHost : ServiceHost 
{ 
    public MyServiceHost() : base() 
    { 
     MyServiceLocator.SetAsDefaultServiceLocator(); 
    } 
} 
4

는 서비스 활성화 (디스크에 어떤 SVC는 파일)을 설치하면 SVC는 파일을 사용하는 경우의 Web.config

<serviceHostingEnvironment> 
     <serviceActivations> 
     <add relativeAddress="MyService.svc" service="MyService" factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" /> 
     </serviceActivations> 
</serviceHostingEnvironment> 

에 공장을 호스팅해서 Ninject를 사용하는 경우 마크 업을 편집하고 <%@ ServiceHost ... %> 선언에 Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"을 추가 할 수 있습니다.

그런 다음 당신은 NinjectWcfApplication에서 상속 제공 한 링크가 오래된 2.2 인 커널

public class Global : NinjectWcfApplication 
{ 
    protected override IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     return kernel; 
    } 
} 
+0

Remo에 대한 내 질문에 대한 의견이 있으십니까? – BuddyJoe

+0

사실 AppStart 폴더는 Nuget에 의해 Ninjet 패키지를 통해 실제로 추가되었습니다. NinjectModule에서 상속받은 클래스를 만들고 Load 메서드에서 바인딩을 설정하는 것이 좋습니다. 그렇게하면 Kernel.Load를 사용하여 바인딩을로드 할 수 있습니다. Troy

관련 문제