Asp.net mvc Ninject:绑定ServiceHost实例以与WCF双工服务一起使用

Asp.net mvc Ninject:绑定ServiceHost实例以与WCF双工服务一起使用,asp.net-mvc,wcf,ninject,duplex-channel,Asp.net Mvc,Wcf,Ninject,Duplex Channel,我正在开发一个WCF服务,该服务使用双工通道,允许该服务回调到客户端,以中继由服务层中的组件引发的事件。代理类的定义和构造如下: public class EvsMembershipProxy : DuplexClientBase<IMembershipProviderCallback>, IEvsMembershipProvider { public EvsMembershipProxy(InstanceContext callbackInstance): base(cal

我正在开发一个WCF服务,该服务使用双工通道,允许该服务回调到客户端,以中继由服务层中的组件引发的事件。代理类的定义和构造如下:

public class EvsMembershipProxy : DuplexClientBase<IMembershipProviderCallback>, IEvsMembershipProvider
{
    public EvsMembershipProxy(InstanceContext callbackInstance): base(callbackInstance)
    { 
    }
}
_ninjectKernal.Bind<IEvsMembershipProvider>().To<EvsMembershipProxy>();
public class EvsMembershipProvider : MembershipProvider, IMembershipProviderCallback
{
    #region "Dependencies"
    [Inject]
    public IEvsMembershipProvider MembershipProvider { get; set; }
    #endregion
}
_ninjectKernal.Inject(System.Web.Security.Membership.Provider);
_ninjectKernal.Inject(System.Web.Security.Roles.Provider);
配置的成员资格提供程序由Ninject注入,如下所示:

public class EvsMembershipProxy : DuplexClientBase<IMembershipProviderCallback>, IEvsMembershipProvider
{
    public EvsMembershipProxy(InstanceContext callbackInstance): base(callbackInstance)
    { 
    }
}
_ninjectKernal.Bind<IEvsMembershipProvider>().To<EvsMembershipProxy>();
public class EvsMembershipProvider : MembershipProvider, IMembershipProviderCallback
{
    #region "Dependencies"
    [Inject]
    public IEvsMembershipProvider MembershipProvider { get; set; }
    #endregion
}
_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);
\u ninjectKernal.Bind().ToMethod(c=>OperationContext.Current.Host);
但是,这会在绑定期间失败,并出现空引用异常

如何绑定ServiceHostBase类型以使此注入工作


**编辑:简化原始代码以删除WCF配置提供的一些EvsMembershipProxy构造函数参数**

发现我可以这样配置它

_ninjectKernal.Bind<IEvsMembershipProvider>()
              .To<EvsMembershipProxy()
              .WithConstructorArgument("callbackInstance", Membership.Provider);
\u ninjectKernal.Bind()
到