编辑
让我感到困惑的是错误。
5)向ModelStateDictionary类型构造函数的参数字典注入依赖关系ModelStateDictionary
ModelStateDictionary有一个接受ModelStateDictionary对象的构造函数。这是错误发生的原因/位置吗?如果是这样,我该如何解决它,因为ModelStateDictionary不是我可以直接修改的n对象。
原创
我一直在尝试在asp.net mvc应用程序中为我的控制器设置依赖注入。但我最终得到了对System.Web.Mvc.ModelStateDictionary的循环依赖。我做了一些搜索……here和here等,我尝试了一些建议,比如创建一个属性(也许我只是不知道把它们放在哪里),而不是通过构造函数传递它。然而,在我看来,System.Web.Mvc.ModelStateDictionary类或定义出现了问题。我得到以下错误...
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我的类的定义大致如下。我显然已经删除了一些无关的东西...
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的定义如下...至少在我看来,它与这个问题有关。
[Serializable]
public class ModelStateDictionary : IDictionary<string, ModelState>, ICollection<KeyValuePair<string, ModelState>>, IEnumerable<KeyValuePair<string, ModelState>>, IEnumerable
{
public ModelStateDictionary();
public ModelStateDictionary(ModelStateDictionary dictionary);
}我为ninject设置的绑定如下所示...
kernel.Bind<IMembershipService>().To<AuthMembershipService>();
kernel.Bind<IProjectService>().To<ProjectService>();
kernel.Bind<IValidationDictionary>().To<ModelStateWrapper>();如果我能提供更多信息,请告诉我...我最初尝试使用structuremap,但无法使DI工作……我似乎至少已经设置好了一个项目,并且大部分时间都在工作。
谢谢,
发布于 2012-02-25 22:55:07
默认情况下,Ninject会选择它知道如何创建的参数最多的构造函数。在本例中,选择了第二个构造函数。这将导致堆栈溢出,因为它必须创建一个ModelStateWrapper来注入到ModelStateWrapper中,而另一个注入到第二个中,......
除非第二个结构有很好的理由,否则你应该简单地删除它。否则,你必须在这里提供足够的信息,让我们能够理解为什么会有第二个构造函数。
https://stackoverflow.com/questions/9441905
复制相似问题