简体   繁体   English

C#Ninject-绑定工厂方法和泛型

[英]C# Ninject - Binding Factory Method and Generic

I have a factory method called MessageHandlerFactory 我有一个名为MessageHandlerFactory的工厂方法

public class MessageHandlerFactory : IMessageHandlerFactory<IMessage>
{
    public IMessageHandler<IMessage> GetMessageHandler()
    {
        return new MessageHandler_1();
    }
}    

... and the following message Handler ...以及以下消息处理程序

public class MessageHandler_1 : IMessageHandler<Message>
{
    //Do Something…
}

public class Message : IMessage
{
    public String Name {get; set;}
}

MessageHandlerFactory needs to be assigned to all occurrences of IMessageHandlerFactory in my project so that calls to IMessageHandlerFactory.GetMessageHandler() will return an instance of MessageHandler_1 . 需要将MessageHandlerFactory分配给我项目中所有出现的IMessageHandlerFactory ,以便对IMessageHandlerFactory.GetMessageHandler()的调用将返回MessageHandler_1的实例。 (In my actual code, I have multiple implementations of IMessageHandler and IMessageHandlerFactory.GetMessageHandler would return an appropriate implementation based on some conditions...). (在我的实际代码中,我有IMessageHandler和IMessageHandlerFactory的多个实现。GetMessageHandler将根据某些条件返回适当的实现...)。 Here is how I do my Ninject binding 这是我如何进行Ninject绑定

Bind<IMessageHandlerFactory<IMessage>>().To<MessageHandlerFactory>();
Bind<IMessageHandler<Message>>().To<MessageHandler_1>();

But when I try accessing the MessageHandlerFactory.GetMessageHandler, I get the following exception 但是当我尝试访问MessageHandlerFactory.GetMessageHandler时,出现以下异常

Ninject.ActivationException: Error activating IMessageHandler{IMessage} No matching bindings are available, and the type is not self-bindable. Ninject.ActivationException:激活IMessageHandler {IMessage}时出错,没有匹配的绑定可用,并且该类型不可自绑定。 Activation path: 1) Request for IMessageHandler{IMessage} 激活路径:1)请求IMessageHandler {IMessage}

Wondering how I could fix it? 想知道我该如何解决? I have been playing with this for quite sometime without any success. 我玩这个游戏已经有一段时间了,没有任何成功。 Any help would be greatly appreciated!! 任何帮助将不胜感激!!

Your exception message implies that you are attempting to resolve an "IMessageHandler< IMessage >", and there is no matching binding. 您的异常消息表示您正在尝试解析“ IMessageHandler <IMessage>”,并且没有匹配的绑定。 The closest you have is a binding for "IMessageHandler< Message >" (note the missing "I"). 最接近的是“ IMessageHandler <Message>”的绑定(请注意缺少的“ I”)。 I'm guessing that's where you're running into a problem. 我猜这就是您遇到问题的地方。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM