찾고있는 확신합니다. 내 구현은 약간 다릅니다,하지만 범위 지정 객체에 대한 해결책을 마련 않았다 다음은 WCF 호스팅하지 않은
Bind<IHelloWorldService>()
.To<HelloWorldService>()
.InScope(NinjectWcfScopeCallbacks.WcfWebContext);
: 완성도를 들어
using System;
using Ninject.Activation;
namespace Ninject.Contrib.Wcf {
/// <summary>
/// Defines Scope Callbacks for WCF Context.
/// </summary>
public class NinjectWcfScopeCallbacks {
/// <summary>
/// Defines WCF Context scope.
/// </summary>
public static readonly Func<IContext, object> WcfContext =
ctx => (System.ServiceModel.OperationContext.Current != null
? System.ServiceModel.OperationContext.Current.
InstanceContext.
Extensions.Find<NinjectInstanceContext>()
: null);
/// <summary>
/// Defines WCF Web Context scope.
/// </summary>
public static readonly Func<IContext, object> WcfWebContext =
ctx => System.ServiceModel.Web.WebOperationContext.Current;
}
}
, 이것은 내가 위에서 정의 된 콜백을 사용하는 방법입니다 WAS의 서비스이므로 위에서 정의한 WcfWebContext
또는 WcfContext
을 사용할 지 확실하지 않지만 사용해 볼 수는 있습니다. WebOperationContext
이 작동하면 모두 설정됩니다. 그렇지 않으면, 나는 물건이 조금 더 복잡하다는 것을 알았다. 위의 코드 스 니펫은 OperationContext
에 연결된 NinjectInstanceContext
클래스를 사용합니다. 이 클래스는 Ninject 2.0의 "캐시 및 수집"메커니즘을 사용하여 객체를 결정적으로 처리 할 수있는 클래스입니다. 기본적으로, 클래스는 WCF가 OperationContext
거의 아무것도 부착 구성이다 구현 IExtension<InstanceContext>
이다. 이 클래스는 또한 Ninject의 결정적 처분에 대한 지원을 제공하는 INotifyWhenDisposed
인터페이스를 구현합니다.
/// <summary>
/// Defines a custom WCF InstanceContext extension that resolves service instances
/// using Ninject.
/// <remarks>
/// The custom InstanceContext extension provides support for deterministic disposal
/// of injected dependencies and service instances themselves by being hook into
/// Ninject's "cache and collect" mechanism (new in Ninject 2.0) for object life cycle
/// management. This allows binding object instances to the lifetime of a WCF context
/// and having them deterministically deactivated and disposed.
/// </remarks>
/// </summary>
public class NinjectInstanceContext :
IExtension<InstanceContext>, INotifyWhenDisposed {
}
Ninject에 대한 내 WCF 확장의 나머지는 GitHub의에 one과 동일 : 다음과 같은 클래스 정의는 모습입니다. 기본적으로 어떤 일이 일어나는가하는 것은 인스턴스 공급자가 WCF "활성화"체인에 연결되어 생성된다는 것입니다. 특정 용어를 사용하지 않고 사물을 어떻게 이해하는지 알 수 있습니다. 따라서 인스턴스 공급자는 요청되는 WCF 서비스 클래스의 인스턴스를 제공해야합니다. 그래서 여기에 Ninject를 사용하여 서비스 인스턴스를 생성합니다. 그렇게함으로써 우리는 어떤 의존성도 활성화하고 주입 할 수 있습니다. 어떤 인스턴스 공급자가 내 구현하는 일은 NinjectInstanceContext
경우 인스턴스에 Ninject에 커널을 마무리하고 OperationContext
에 첨부합니다. 그런 다음 서비스 생성이이 WCF 확장에 위임됩니다. 인스턴스가 제공하는 서비스를 해제하라고하면 OperationContext 부착 된 NinjectInstanceContext
는 구현의 방법으로 INotifyWhenDisposed
결정적 서비스의 처리 (잠재적 종속성)을 일으키는 배치된다. 이 논의 도움이
희망.관심 있다면 여기에 게시 된 좀 더 구체적인 코드를 얻을 수 있는지 알아 보겠습니다.
깨진 링크. 이 올바른지? https://github.com/ninject/ninject.extensions.wcf –
맞습니다. 링크를 수정했습니다. –