我正在使用asp.net mvc 4.我正在尝试使用带有代码优先模型的ninject和repository模式实现依赖注入。
IMessageRepository
public interface IMessageRepository
{
void IsMessageRead();
}
MessageRepository
public class MessageRepository:IMessageRepository
{
string id="";
public MessageRepository(string idparam)
{
id=idparam;
}
EFMsgContext context=new EFMsgContext(id);
public void IsMessageRead()
{
...
}
}
EFMsgContext
public class EFMsgContext:Dbcontext
{
public EFMsgContext(string id):base("MyContext")
{
//based on id i will construct a connection string from my database.
}
....
}
我的控制器
public class MYController:Controller
{
private IMessageRepository repo;
public MYController(IMessageRepository repoparam)
{
repo=repoparam;
}
public ActionResult Index()
{
repo.IsMessageRead();
}
}
我使用Ninject进行依赖注入我将我的接口绑定到具体的类,如
ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>();
这里如何将构造函数参数传递给绑定,是否有任何方法可以在ninjectcontrollerfactory中编写用于建立连接字符串的逻辑。请指导我。
答案 0 :(得分:1)
您必须使用WithConstructorArgument
扩展方法
ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>().WithConstructorArgument("idparam", value);
您甚至可以传递Func
作为第二个参数。
ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>()
.WithConstructorArgument("idparam", (c) => {
// read from somewhere and return
});