2013-10-11 62 views
1

我開始對我的項目使用Ninject,以自動綁定抽象類的所有子類。這個綁定是 - 很好,很容易 - 如下:Ninject慣例僅適用於公共類嗎?

kernel.Bind(x => x.FromThisAssembly() 
    .SelectAllClasses(). 
    .InheritedFrom<AbstractGenerator>() 
    .BindBase()); 

但是,我發現這是行不通的。經過一些試驗後,我發現這個不起作用的原因是我所有的實現(和抽象類)都標記爲內部

我可以想象這是一些安全功能,以防止從內部泄漏到外部的綁定。但是我可以爲這些類添加顯式綁定。因此,我的問題是:有人知道這是否是有意的行爲嗎?有沒有辦法解決這個問題,除了公開我所有的課程?

回答

6

.SelectAllClasses()之前加上.IncludingNonePublicTypes(),你的綁定也適用於內部類。

也看到了這個問題:Cannot get Ninject.Extensions.Conventions to work

我不認爲它是關於安全性。我想這是關於設計,也許是關於性能:僅從公共類型中進行選擇比從所有類型中進行選擇需要更少的時間。

+0

謝謝,這就是我一直在尋找的。只是我在SelectAllClasses()之後搜索量化,因爲那是所有其他量化發生的地方...抱歉,重複,但我找不到這個其他帖子...... –

相關問題