对象初始化之后,Ninject可以解析抽象依赖吗?

问题描述

| 有谁知道有可能使用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 (将#修改为@)