我正在开发一个使用双工通道的 WCF 服务,以允许服务回调客户端以中继服务层中的组件引发的事件。代理类的定义和构造如下:
public class EvsMembershipProxy : DuplexClientBase<IMembershipProviderCallback>, IEvsMembershipProvider
{
public EvsMembershipProxy(InstanceContext callbackInstance): base(callbackInstance)
{
}
}
我需要在使用 ASP.NET 成员资格系统配置的类中获取此类的实例,因此我将其绑定如下:
_ninjectKernal.Bind<IEvsMembershipProvider>().To<EvsMembershipProxy>();
我像这样注入它:
public class EvsMembershipProvider : MembershipProvider, IMembershipProviderCallback
{
#region "Dependencies"
[Inject]
public IEvsMembershipProvider MembershipProvider { get; set; }
#endregion
}
配置的成员资格提供程序由 Ninject 注入,如下所示:
_ninjectKernal.Inject(System.Web.Security.Membership.Provider);
_ninjectKernal.Inject(System.Web.Security.Roles.Provider);
我已经用没有双工服务的 WCF 服务层测试了注入模式,它工作正常。但是,当我包含双工服务时,Ninject 在绑定过程中失败并出现以下错误:
Error activating ServiceHostBase
No matching bindings are available, and the type is not self-bindable.
Activation path:
4) Injection of dependency ServiceHostBase into parameter host of constructor of type InstanceContext
3) Injection of dependency InstanceContext into parameter callbackInstance of constructor of type EvsMembershipProxy
2) Injection of dependency IEvsMembershipProvider into property MembershipProvider of type EvsMembershipProvider
1) Request for EvsMembershipProvider
Suggestions:
1) Ensure that you have defined a binding for ServiceHostBase.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
5) If you are using automatic module loading, ensure the search path and filters are correct.
所以看起来我需要一个绑定到 EvsMembershipProxy 构造函数中使用的 ServiceHostBase 类来解决这个问题。但是,我不知道如何配置它。到目前为止,我解决 ServiceHostBase 绑定的最佳尝试是:
_ninjectKernal.Bind<ServiceHostBase>().ToMethod(c => OperationContext.Current.Host);
但是,这会在绑定期间失败并出现空引用异常。
如何绑定 ServiceHostBase 类型以便此注入起作用?
**编辑:简化原始代码以删除一些可以由 WCF 配置提供的 EvsMembershipProxy 构造函数参数**