请原谅我的无知,但我对IOC和NinJect很新.我已经寻找到高低的易于理解的解决方案,但到目前为止,他们已经逃避了我.
到目前为止,我有以下和所有的工作如预期:
private class StandardModule : NinjectModule { public override void Load() { Bind<ILog>().To<NLogLogger>(); // Use NLog Bind<IMyEntityFrameWorkRepository().To<MyEntityFrameWorkRepository>(); } }
MyEntityFrameWorkRepository然后通过app / web.config中声明的连接字符串创建自己的EF DbContext:
public class MyDbContext : DbContext { public MyDbContext() : base("MyAppConfig") { } ........ }
然而!!我的目标是这样的 – 我意识到这种语法是“废话”(我想我也可能需要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专家的一些反馈意见,因为我确信任何“模式”在其他情况下都是非常有用的.
解决方法
您可以使用.WithConstructorArgument()方法来指定构造函数参数.第一个参数应该是构造函数参数的名称.
public class StandardModule : NinjectModule { public override void Load() { string connectionString = "..."; Bind<IMyEntityFrameWorkRepository().To<MyEntityFrameWorkRepository>() .WithConstructorArgument("sqlConnectionString",connectionString); }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。