I am working on asp.net mvc 4. I am trying to implement dependeny injection using ninject and repository pattern with code first model.

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.
}
....
}

my controller

public class MYController:Controller
{
private IMessageRepository repo;
public MYController(IMessageRepository repoparam)
{
repo=repoparam;
}
public ActionResult Index()
{
  repo.IsMessageRead();
}
}

and i am using Ninject for dependency injection i bind my interface with concrete class like,

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>();

here how could i pass constructor parameters to the binding and is there any way to write the logic for buidling connection string inside the ninjectcontrollerfactory. please guide me.

有帮助吗?

解决方案

You have to use the WithConstructorArgument extension method

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>().WithConstructorArgument("idparam", value);

You can even pass a Func as a second argument.

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>()
             .WithConstructorArgument("idparam", (c) => {
                   // read from somewhere and return
              });
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top