【问题标题】:ModelStateDictionary cyclic dependency - ninject won't self bindModelStateDictionary 循环依赖 - ninject 不会自绑定
【发布时间】:2012-02-27 04:10:01
【问题描述】:

我创建了一个启动 MVC 3 应用程序设置 ninject,并在构造函数中向控制器构造函数传递了 ModelStateDictionary 对象。这是来自 System.Web.Mvc 命名空间的对象。

使用隐式自绑定激活 ModelStateDictionary 时出错 ModelStateDictionary 在 两个服务的构造函数。

激活路径:3)依赖ModelStateDictionary注入 ModelStateDictionary 类型构造函数的参数字典 2) 将依赖 ModelStateDictionary 注入参数 modelDict HomeController 类型的构造函数 1) HomeController 的请求

我该如何解决这个问题?我如何以一种有效的方式抽象它?是否可以?我已经在 Stackoverflow 和 ninject.org 上进行了一些搜索……但看不到它在这里是如何应用的,因为我无法直接修改 ModelStateDictionary。

public class HomeController : Controller
{
    private readonly ModelStateDictionary _modelDict;

    public HomeController(ModelStateDictionary modelDict)
    {
        _modelDict = modelDict;
    }

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }
}


public void SetupDependencyInjection()
{
    IKernel kernel = new StandardKernel();

    //kernel.Bind<>().To<>();

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}


public class NinjectDependencyResolver : IDependencyResolver
{
    private readonly IResolutionRoot _resolutionRoot;

    public NinjectDependencyResolver(IResolutionRoot kernel)
    {
        _resolutionRoot = kernel;
    }


    public object GetService(Type serviceType)
    {
        return _resolutionRoot.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _resolutionRoot.GetAll(serviceType);
    }
}

这是一个简单的例子,我没有在自己的代码中使用这种方式......但情况和理论是一样的。 ModelStateDictionary 应该是隐式自绑定的。 Ninject 选择接受 ModelStateDictionary 对象的构造函数,即使有一个不接受参数的构造函数。如果参数最多的构造函数不起作用,ninject不应该回退到没有参数的构造函数吗?

【问题讨论】:

  • Kevin Donde,你为什么将 ModelStateDictionary 作为参数传递给 Controller。我认为这是个坏主意。你想直接修改ModelStateDictionary做什么?

标签: asp.net-mvc-3 dependency-injection ninject


【解决方案1】:

不,Ninject 不会尝试构造函数,直到找到一个不会失败的构造函数。它选择具有最多参数的构造函数并使用它。如果构造函数失败,则抛出异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多