Я использую 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 - это то, что я сейчас хочу внедрить.Я подключил свой IRepositoryFactory к моим привязкам Ninject, но когда я тестирую код, я вижу:
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
Итак, Nineject говорит, что не может видеть привязку для обратного вызова ... Я не могупросто определите привязку для обратного вызова, который я предполагаю - возможно ли это с помощью ninject?
Примечание. Этот вопрос аналогичен Dependency Inject с Ninject 2.0 , но я спрашиваю его еще раз, потому чтотам нет принятых ответов.В этом посте предлагается ввести фабрику, но я не уверен, как это будет выглядеть, и если это будет означать, что вам не нужно использовать DuplexChannelFactory.
Спасибо.