2014-05-04 30 views
0

我有一個工廠方法稱爲MessageHandlerFactoryC#Ninject - 裝訂工廠方法和通用

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

...和下​​面的消息處理

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

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

MessageHandlerFactory需要被分配到在我的項目中所有發生的IMessageHandlerFactory,以便調用IMessageHandlerFact ory.GetMessageHandler()將返回一個MessageHandler_1的實例。 (在我的實際代碼中,我有多個IMessageHandler和IMessageHandlerFactory的實現.GetMessageHandler將根據一些條件返回適當的實現...)。這裏是我做我的Ninject結合

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

但是當我嘗試訪問MessageHandlerFactory.GetMessageHandler,我得到下面的異常

Ninject.ActivationException:錯誤激活 IMessageHandler {}的IMessage無匹配的綁定可用,並且 類型不可自行綁定。激活路徑:1)請求 IMessageHandler {即時消息}

想知道我該如何修復它?我一直在玩這個遊戲很久沒有取得任何成功。任何幫助將不勝感激!!

+0

您的實際執行情況必須與您在此處提供的不同,因爲您在此處提供的代碼不會*,永遠*,解決'IMessageHandler '。沒有'IResolutionRoot.Get <..>'。所以請提供您的*實際*代碼,以便我們可以提供幫助。你可能也想看看ninject.extensions.factory - 它消除了實現工廠只需要返回IResolutionRoot.Get <...>()' – BatteryBackupUnit

回答

0

您的異常消息意味着您正在嘗試解析「IMessageHandler < IMessage>」,並且沒有匹配的綁定。您最接近的是「IMessageHandler <消息>」的綁定(請注意丟失的「我」)。我猜這就是你遇到問題的地方。