Как передать аргументы конструктора в ninjectcontrollerfactory в asp.net mvc DI

Я работаю над asp.net mvc 4. Я пытаюсь реализовать внедрение зависимостей, используя шаблон ninject и репозиторий с моделью кода в первую очередь.

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>();

здесь, как я мог передать параметры конструктора в привязку и есть ли способ написать логику для объединения строки соединения внутри завода ninjectcontroller. пожалуйста, направь меня.

1 ответ

Решение

Вы должны использовать WithConstructorArgument метод расширения

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

Вы даже можете передать Func в качестве второго аргумента.

ninjectKernel.Bind<IMessageRepository>().To<MessageRepository>()
             .WithConstructorArgument("idparam", (c) => {
                   // read from somewhere and return
              });
Другие вопросы по тегам