gpt4 book ai didi

c# - Ninject 与 WCF 双工 channel

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:26 25 4
gpt4 key购买 nike

我正在使用 ninject 和 wcf 将参数注入(inject)服务类。我现在需要为双工服务执行此操作,但我不确定如何继续。

目前,我的客户端使用 DuplexChannelFactory 调用双工服务,如下所示:

    InstanceContext instanceContext = new InstanceContext(new TheCallback());
var factory = new DuplexChannelFactory<IScannerManager>(instanceContext, "ScannerManagerEndPoint");
var channel = factory.CreateChannel();

IClientCallBack 是我的双工通信契约(Contract)的一部分:

[ServiceContract(CallbackContract = typeof(IClientCallBack))]
public interface IScannerManager
{
[OperationContract]
void Register(string token);

}

public interface IClientCallBack
{
[OperationContract(IsOneWay = true)]
void SendClientMessage(ScannerMessageWrapper message);
}

我已经修改了我的服务构造器以添加我想像这样注入(inject)的新参数:

    public ScannerManagerService(Func<IClientCallBack> callBack, IRepositoryFactory repositoryFactory)
{ .. }

其中 IRepositoryFactory 是我现在要注入(inject)的。我已经在我的 ninject 绑定(bind)中连接了我的 IRepositoryFactory,但是当我测试我看到的代码时:

System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail] : Error activating IntPtr
No matching bindings are available, and the type is not self-bindable.
Activation path:
3) Injection of dependency IntPtr into parameter method of constructor of type Func{IClientCallBack}
2) Injection of dependency Func{IClientCallBack} into parameter callBack of constructor of type ScannerManagerService
1) Request for ScannerManagerService

所以 ninject 说它看不到回调的绑定(bind)。我不能只为我假设的回调定义绑定(bind) - ninject 可以吗?

注意:这个问题类似于Dependency Inject with Ninject 2.0 ,但我又问了一遍,因为那里没有可接受的答案。在那篇文章中提出了注入(inject)工厂的建议,但我不确定这会是什么样子,也不确定这是否意味着您不需要使用 DuplexChannelFactory。

谢谢。

最佳答案

我没有找到关于 IClientCallback 的任何信息在线类(class),所以我假设这是您的产品特有的东西?您当然可以创建到 Func<IClientCallback> 的绑定(bind),或者您可以定义一个特定的工厂接口(interface)并绑定(bind)到它。

Bind<Func<IClientCallback>>.To...

public interface IClientCallbackFactory { IClientCallback GetCallback(); }
...
Bind<IClientCallbackFactory.To...

问题是,我不知道你会将它绑定(bind)到什么,因为我不知道它在你的应用程序中扮演什么角色。

更新

我做了a little reading up on Duplex Services ,我认为这可能是您要查找的内容:

Bind<Func<IClientCallback>>().ToMethod(
c => () => OperationContext.Current.GetCallbackChannel<IClientCallback>());

正如我之前提到的,您同样可以创建一个使用相同方法实现的工厂接口(interface)。

关于c# - Ninject 与 WCF 双工 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6495237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com