簡體   English   中英

Ninject與WCF雙工通道

[英]Ninject with WCF Duplex channel

我將ninject與wcf一起使用,以將參數注入服務類。 我現在需要為雙工服務執行此操作,並且不確定如何繼續。

此刻,我的客戶端使用DuplexChannelFactory調用雙工服務,如下所示:

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

IClientCallBack是我的雙工通信合同的一部分:

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

}

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

我已經修改了服務ctor以添加要注入的新參數,如下所示:

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

我現在要注入IRepositoryFactory的位置。 我已經在我的ninject綁定中連接了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表示無法看到該回調的綁定。.我不能只是為我假定的回調定義一個綁定-ninject是否可能?

注意:這個問題類似於Ninject 2.0的Dependency Inject ,但是我再次詢問是因為那里沒有公認的答案。 在那篇文章中提出了注入工廠的建議,但是我不確定它的外觀以及是否意味着您不需要使用DuplexChannelFactory。

謝謝。

我沒有在線找到有關IClientCallback類的任何信息,因此我假設這是您的產品特有的? 您當然可以創建到Func<IClientCallback>的綁定,也可以定義一個特定的工廠接口並綁定到該接口。

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

要么

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

問題是,我不知道您將其綁定到什么,因為我不知道它在您的應用程序中扮演什么角色。

更新資料

我做了一些有關Duplex Services的閱讀 ,我認為這可能是您想要的:

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

如前所述,您可以類似地創建使用相同方法實現的工廠接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM