2
構造器
使用Ninject 3.0,我知道我可以在解決時間從而將參數傳遞給具體的服務的構造:通行證位置參數在Ninject
IKernel kernel = new StandardKernel();
kernel.Bind<IService>.To<ConcreteService>();
MySettings mySettings = new DefaultConcreteServiceSettings();
IService service = kernel.Get<IService>(new[] { new ConstructorArgument("settings", mySettings) });
的ConstructorArgument
對象需要兩個參數 - 第一個是名稱重寫的參數,第二個是它的注入值。
是否有可能基於其在構造函數中的足跡,而不是正式的參數名稱位置注入mySettings
到IService
的構造?
編輯
每@ nemesv的要求下,我加入了一些示例代碼ConcreteService
。我的動機是基於一種觀念,根據參數名稱爲每一個具體的實施IService
,使代碼脆弱:
public class ConcreteService : IService
{
readonly ISettings _settings;
public ConcreteService(ISettings settings)
{
_settings = settings;
}
}
public class ConcreteServiceBySomePoorGuyWhoCantSpell : IService
{
readonly ISettings _settings;
public ConcreteServiceBySomePoorGuyWhoCantSpell(ISettings suttingz)
{
_settings = suttingz;
}
}
您可以發佈示例'ConcreteService'嗎?你使用參數名稱的問題是什麼?你爲什麼想要根據職位進行綁定? – nemesv
爲什麼不在容器中註冊你的'ISettings'。所以Ninject會自動爲你解決它:'kernel.Bind().ToConstant(mySettings); IService service = kernel.Get ()});'如果你不想在每個Iservice中使用這個mysetting可以使用'WhenInjectedInto'配置選項來限制注入默認設置的位置 –
nemesv
@memesv - 我最終做了一些近似於您的建議。爲了完成,是否有可能在解析時使用位置參數注入? – bavaza