請原諒我的無知,但我對IOC和NinJect非常陌生。爲了易於理解的解決方案,我搜索了高和低,但到目前爲止他們已經躲過了我。Ninject - 具有參數的綁定構造函數/實體框架連接字符串
到目前爲止,我有以下的和預期的所有作品:
public class MyDbContext : DbContext
{
public MyDbContext() : base("MyAppConfig")
{
}
........
}
但是:那麼
private class StandardModule : NinjectModule
{
public override void Load()
{
Bind<ILog>().To<NLogLogger>(); // Use NLog
Bind<IMyEntityFrameWorkRepository().To<MyEntityFrameWorkRepository>();
}
}
MyEntityFrameWorkRepository通過在app/web.config文件中聲明的連接字符串創建自己的EF的DbContext !我的目標是這樣的 - 我知道這句法是「胡說八道」(我認爲我可能要IOC MyDbConext太),但我希望「僞代碼」傳達我的心願:
private class StandardModule : NinjectModule
{
public override void Load()
{
Bind<ILog>().To<NLogLogger>(); // Use NLog
string mySqlConnectionString = MyApp.GetCommandLineArgument("sqlconn"); // "Data Source=..."
Bind<IMyEntityFrameWorkRepository().To<MyEntityFrameWorkRepository>(mySqlConnectionString);
}
}
.................
public class MyDbContext : DbContext
{
public MyDbContext(string sqlConnectionString) :
base(sqlConnectionString) // will accept a standard SQL connection string
{
}
........
}
我真的很感謝來自IOC/NinJect專家的一些反饋,因爲我確信任何「模式」在其他情況下都非常有用。
TY太多了! ..我在搜索過程中看到了這個構造,但由於某種原因,我總是(錯誤地)關注'connectionString'的「範圍」......但是您的簡潔例子清楚地表明它僅僅是綁定的_value_重要。 – JcMaltaDev
有沒有辦法做到這一點,沒有魔術字符串,或者讓ninject知道哪個超載,但決定在哪裏獲取值? – Maslow
@Maslow我不認爲你可以在Ninject 2.2中做到這一點(但不要聽我說)。但是,您應閱讀討論即將進行的更改的[博客文章](http://www.planetgeek.ch/2011/05/28/ninject-constructor-selection-preview/)。 – mrydengren