- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
我正在寻找一个跨平台的 C++ master/worker 库或工作队列库。一般的想法是我的应用程序将创建某种任务或工作对象,将它们传递给工作主机或工作队列,这将依次在单独的线程或进程中执行工作。为了
我是一名优秀的程序员,十分优秀!