首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelStateDictionary循环依赖项注入循环错误

ModelStateDictionary循环依赖项注入循环错误
EN

Stack Overflow用户
提问于 2012-02-25 14:35:41
回答 1查看 364关注 0票数 0

编辑

让我感到困惑的是错误。

5)向ModelStateDictionary类型构造函数的参数字典注入依赖关系ModelStateDictionary

ModelStateDictionary有一个接受ModelStateDictionary对象的构造函数。这是错误发生的原因/位置吗?如果是这样,我该如何解决它,因为ModelStateDictionary不是我可以直接修改的n对象。

原创

我一直在尝试在asp.net mvc应用程序中为我的控制器设置依赖注入。但我最终得到了对System.Web.Mvc.ModelStateDictionary的循环依赖。我做了一些搜索……herehere等,我尝试了一些建议,比如创建一个属性(也许我只是不知道把它们放在哪里),而不是通过构造函数传递它。然而,在我看来,System.Web.Mvc.ModelStateDictionary类或定义出现了问题。我得到以下错误...

代码语言:javascript
复制
Activation path:
5) Injection of dependency ModelStateDictionary into parameter dictionary of constructor of type ModelStateDictionary
4) Injection of dependency ModelStateDictionary into parameter modelState of constructor of type ModelStateWrapper
3) Injection of dependency IValidationDictionary into parameter validationDictionary of constructor of type ProjectService
2) Injection of dependency IProjectService into parameter prjService of constructor of type ProjectController
1) Request for ProjectController

我的类的定义大致如下。我显然已经删除了一些无关的东西...

代码语言:javascript
复制
public class ProjectController : Controller
{
    private IProjectService _prjService;
    private IMembershipService _membershipService;

    public ProjectController(IProjectService prjService,IMembershipService membershipService )
    {
        _membershipService = membershipService;
        _prjService = prjService;
    }

}


public class ProjectService : ServiceBase, IProjectService
{
    public ProjectService(IValidationDictionary validationDictionary) : base(validationDictionary) { }
}


public class ServiceBase
{
    private readonly IValidationDictionary _validationDictionary;

    public IValidationDictionary ValidationDictionary { get { return _validationDictionary; } }

    public ServiceBase(IValidationDictionary validationDictionary)
    {
        _validationDictionary = validationDictionary;
    }

}


public interface IProjectService
{
    // interface has other properties 

    IValidationDictionary ValidationDictionary { get; }
}

public class ModelStateWrapper : IValidationDictionary
{
    private ModelStateDictionary _modelState;

    public ModelStateWrapper(ModelStateDictionary modelState)
    {
        _modelState = modelState;
    }

    public ModelStateWrapper()
    {

    }

    public void AddError(string key, string errorMessage)
    {
        _modelState.AddModelError(key, errorMessage);
    }

    public bool IsValid
    {
        get { return _modelState.IsValid; }
    }
}

ModelStateDictionary的定义如下...至少在我看来,它与这个问题有关。

代码语言:javascript
复制
[Serializable]
public class ModelStateDictionary : IDictionary<string, ModelState>, ICollection<KeyValuePair<string, ModelState>>, IEnumerable<KeyValuePair<string, ModelState>>, IEnumerable
{
    public ModelStateDictionary();

    public ModelStateDictionary(ModelStateDictionary dictionary);
}

我为ninject设置的绑定如下所示...

代码语言:javascript
复制
        kernel.Bind<IMembershipService>().To<AuthMembershipService>();
        kernel.Bind<IProjectService>().To<ProjectService>();
        kernel.Bind<IValidationDictionary>().To<ModelStateWrapper>();

如果我能提供更多信息,请告诉我...我最初尝试使用structuremap,但无法使DI工作……我似乎至少已经设置好了一个项目,并且大部分时间都在工作。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2012-02-25 22:55:07

默认情况下,Ninject会选择它知道如何创建的参数最多的构造函数。在本例中,选择了第二个构造函数。这将导致堆栈溢出,因为它必须创建一个ModelStateWrapper来注入到ModelStateWrapper中,而另一个注入到第二个中,......

除非第二个结构有很好的理由,否则你应该简单地删除它。否则,你必须在这里提供足够的信息,让我们能够理解为什么会有第二个构造函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9441905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档