【问题标题】:Dependency injection inside ASP.NET MVC custom model binders and filtersASP.NET MVC 自定义模型绑定器和过滤器中的依赖注入
【发布时间】:2010-06-29 22:48:48
【问题描述】:

这是我的 BaseContentObject 类的自定义模型绑定器代码:

public class BaseContentObjectCommonPropertiesBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException("controllerContext");
        }
        if (bindingContext == null)
        {
            throw new ArgumentNullException("bindingContext");
        }

        BaseContentObject obj = (BaseContentObject)base.BindModel(controllerContext, bindingContext);
        IContentRepository repository = new XmlContentRepository(obj.ContentType);

        // do something with the object and repository here...

        return obj;
    }
}

为了清楚起见,我省略了一些代码。

我感兴趣的是这条线。

IContentRepository repository = new XmlContentRepository(obj.ContentType);

我已经为依赖注入设置了所有东西,它可以与我的控制器一起使用。我正在使用忍者 2。 不知何故,我需要在这个模型绑定器中连接 DI(我也有与 MVC 操作过滤器类似的问题) - 在自定义绑定器和自定义操作过滤器中,我有时需要访问存储库或服务,因为我必须访问数据库。

更糟糕的是,内容存储库不是固定的,它依赖于“obj.ContentType”。

到目前为止,我发现的所有内容都指向 Ninject 文档,但它的 wiki 只显示了非常基本的示例,而且看起来还没有更新到第 2 版。

【问题讨论】:

  • stackoverflow.com/questions/2899680/… 找到了这个问题和 Mark Seemann 的回复,其中谈到不将 DI 与模型活页夹一起使用,但任何有关这方面的 cmet 仍将不胜感激

标签: c# asp.net-mvc ninject


【解决方案1】:

该项目声称能够将依赖项注入 ModelBinder http://mvcextensions.codeplex.com/。由 Telerik 的 Kazi Manzur Ra​​shid 完成。

【讨论】:

    【解决方案2】:

    如果我对问题的理解正确,您希望将 repository 设为一个属性,然后在构造函数中调用 Ninject Kernel 的 Inject 方法,并将 this 作为参数。

    如果您使用[Inject] 属性来识别应该注入的属性,那么在这个属性上使用它。如果您使用自动绑定,则创建一个Module,它将IContentRepository 类型的属性自动绑定到XmlContentRepository 的构造函数。

    现在您必须解决的唯一问题是将 ContentType 传递给存储库,因为您的构造函数无权访问它。可能是IContentRepository 上的ContentType 属性?

    [编辑] 说了这么多,我不同意您可能应该找到与 DI 不同的方法的论点。我只是在解释如何做到这一点,以防你真的想这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多