2017-05-04 94 views
0

好吧,所以我認爲我有一個基本的差距如何Ninject工程跨組件,我希望有人可以幫助我。MongoDB與Ninject:解決從存儲庫中的依賴關係

我有一個asp.net mvc網站,它引用了一個包含我的域對象和我的存儲庫以及一些服務的Core.dll。我的域對象有一個構造函數和看起來像這樣

public class MyMessage{ 
    private IMyService _myService; 
    public MyMessage(IMyService myService) {...} 
    public void Send() { //uses IMyService } 
} 

我的倉庫只是返回IEnumerable<MyMessage>的方法。

在我的asp.net mcv網站控制器中,我正在注入存儲庫並致電 var msg = await myRepository.GetOneAsync(id)。然後我想打電話給msg.send()

我面臨的問題是,當對象從存儲庫返回時,_myService始終爲空。

更新,增加了信息ON REPOSITORY

爲myRepositry.Get的代碼如下所示:

public async Task<MyMessage> GetOneAsync(string messageId) 
=> await Collection.Find(q => q.Id == messageId).SingleOrDefaultAsync(); 

其中collection是IMongoCollection<MyMesage>。所以基本上,Mongo 2.0 C#驅動程序正在爲我序列化對象,而且我似乎無法讓Ninject在它發生時解決依賴關係。

如果我打電話DependencyResolver.Current.GetService<MyMessage>()它工作正常,但從來沒有通過存儲庫創建對象時。

是什麼我想實現可能?如果是這樣,怎麼樣?如果不是,我有什麼選擇?目前我只是創建依賴解決MyMessage和基於庫返回水合它。

感謝,

+0

您的存儲庫是如何實現的? – rexcfnghk

+1

你的問題是各種各樣的地方,並沒有真正提供任何真實的信息來提出建議。 「當對象由存儲庫創建時」是什麼意思?您的存儲庫如何創建MyMessages? –

+0

@ErikFunkenbusch已更新,以在存儲庫中添加一些信息。這有幫助嗎? –

回答

-3

您需要更改爲myService到_myService如下:

public MyMessage(IMyService _myService) {...} 

由於ninject需要相同的對象名注入實例。

+0

Ninject沒有這個要求AFAIK – rexcfnghk

+1

只要在容器中註冊的接口就有相同的對象名稱,但是我們沒有匹配名稱,它工作正常。 –

+0

@rexcfnghk你是對的,我的不好。 – User3250