我有我的通用綁定,和其中一個是這樣的:Ninject WithConstructorArgument不覆蓋類型的全局綁定?
Bind<IHasher>().To<SHA256Hasher>();
這個偉大的工程,因爲有其整個使用該散列器幾類。然而,有一個或兩個控制器需要另一種類型的散列器來與第三方一起使用哈希,比如希望有md5散列的gravatar。於是我做了如下:
Bind<ISomeController>().To<SomeController>().Named("SomeController").WithConstructorArgument("emailHasher", new Md5Hasher());
然後我的控制器看起來像:
public class SomeController : Controller
{
private IHasher emailHasher;
public CampaignController(IHasher emailHasher)
{
this.emailHasher = emailHasher;
}
}
調試時我期望IHasher是Md5Hasher,但它是一個Sha256Hasher。那麼這是預期的行爲和任何方式使它使用重寫類型?
通常控制通過它們的類型解決,而不是通過某個接口解決,也不需要註冊它們'Named',所以試着註冊:'綁定()。ToSelf()。WithConstructorArgument(「emailHasher 「,new Md5Hasher());' –
nemesv
這個問題有一個原因在這個問題的範圍之外,因爲我使用插件樣式的體系結構和控制器是通過名字訪問的,但是我只是想把它放在它之前這可能會影響這個區域的注入過程。所以有一個原因爲什麼有一個具體類型和命名標準的接口。 – Grofit
'WithConstructorArgument'應該按預期工作,所以你的自定義插件樣式體系結構中還有其他的東西會導致你的問題......也許你的控制器註冊沒有按正確的順序調用,你的'WithConstructorArgument'註冊後來被一些默認值覆蓋。 .. – nemesv