如何在asp.net mvc DI中将构造函数参数传递给ninjectcontrollerfactory

时间:2012-11-12 08:35:30

标签: asp.net-mvc dependency-injection ninject.web.mvc

我正在使用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中编写用于建立连接字符串的逻辑。请指导我。

1 个答案:

答案 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
              });