问题描述
|
有谁知道有可能使用Ninject来解决实例化过程之外的所有未解决的抽象依赖项吗?我一直在研究构造函数注入与属性/方法/字段注入,但是在我看来,Ninject仍然希望使用IKernel.Get <>()方法成为该类型的创建者。
基本上,我们使用MVC3来构建我们的产品,并且遇到了这样的情况:我们希望默认的ModelBinder将表单值映射到对象的实例,然后能够在对象上调用方法提交的ViewModel依赖于抽象接口,例如
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 <>()实例化的,因此我无法完全解决该问题。
也许解决方案是基于Ninject的ModelBinder,或者这真的不是一个好主意吗?
编辑:在下面的评论之后,我意识到我匆忙模拟的代码示例并没有真正反映我们所面临的问题。我已经更新了代码示例,以反映InviteFriend.Execute()的逻辑比仅在一个存储库上调用方法更为复杂。潜在地,这是代表离散任务的逻辑,该任务可以协调多个不同域对象和多个存储库之间的交互。存储库是抽象定义的,理想情况下将由Ninject解决。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)