У меня есть класс под названием MyMailSender, который привязывается к контроллеру asp.net с именем EmailController.
E.g.
public EmailController(IMailSender sender)
{
//MyMailSender
this.sender = sender;
}
Этот класс MyMailSender
также зависит от класса с именем MessageSender
.
Прямо сейчас мой процесс работает без инъекции, делая следующее.
public class MyMailSender : IMailSender
{
private IMessageSender messageSender;
public MyMailSender()
{
messageSender = new SmtpMessageSender("mail.address.com", 25);
}
}
Как я могу заставить этот зависимый класс привязываться к классу MyMailSender
с помощью Ninject?
MyMailSender
начальная привязка выполняется через заводскую привязку контроллера
public override void Load()
{
Bind<IMailSender>()
.To<MyMailSender>();
}
Я попытался привязаться к фабрике контроллера, например:
Bind<IMessageSender>()
.To<SmtpMessageSender>().WithConstructorArgument("mail.address.com", 25);
но я подозреваю, что не стоит привязываться сюда для такого типа привязки. Каковы мои варианты?
Мое сообщение об ошибке:
Error activating string
No matching bindings are available, and the type is not self-bindable.
Activation path:
4) Injection of dependency string into parameter hostname of constructor of type SmtpMessageSender
3) Injection of dependency IMessageSender into parameter messageSender of constructor of type MyMailSender
2) Injection of dependency IMailSender into parameter sender of constructor of type EmailController
1) Request for EmailController
Suggestions:
1) Ensure that you have defined a binding for string.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
5) If you are using automatic module loading, ensure the search path and filters are correct.