Как передать аргументы конструктора в 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
});