Кто-нибудь знает, возможно ли использовать Ninject для разрешения любых неразрешенных абстрактных зависимостей вне процесса создания экземпляра? Я только что посмотрел на внедрение конструктора против внедрения свойства / метода / поля, но мне кажется, что Ninject все еще ожидает быть создателем типа с использованием метода IKernel.Get <> ().
По сути, мы используем MVC3 для создания нашего продукта, и мы столкнулись с ситуацией, когда мы хотим, чтобы ModelBinder по умолчанию отображал значения формы на экземпляр объекта, а затем мог вызывать метод для представленная модель представления, которая зависит от абстрактного интерфейса, например
public class InviteFriend {
[Required]
public string EmailAddress { get; set; }
public void Execute() {
var user = IUserRepository.GetUser(this.EmailAddress);
if (user == null) {
IUserRepository.SaveInvite(this.EmailAddress);
}
MailMessage toSend = new MailMessage(); // Obviously some logic to prepare the body, subject and other mail properties
SmtpClient.Send(toSend);
}
}
где действие контроллера получит InviteFriend в качестве аргумента метода. Мы хотим, чтобы Ninject мог разрешить эту зависимость IUserRepository, но я не совсем понимаю, как это сделать, поскольку сам объект создается экземпляром с помощью MVC ModelBinder, а не Ninject IKernel.Get <> ().
Может быть, решение - это ModelBinder на основе Ninject, или это действительно плохая идея?
РЕДАКТИРОВАТЬ В ДОБАВИТЬ: После комментариев ниже я понимаю, что мой поспешно смоделированный пример кода на самом деле не отражает то, с чем мы столкнулись. Я обновил пример кода, чтобы отразить, что логика для InviteFriend.Execute () является более сложной, чем просто вызов метода в одном репозитории. Потенциально это логика, представляющая дискретную задачу, которая могла бы координировать взаимодействия между несколькими различными объектами домена и несколькими хранилищами. Репозитории определены абстрактно, и в идеале это должно быть разрешено Ninject.