EDIT
Особая часть, в которой я запутался, - это ошибка.
5) Внедрение зависимости ModelStateDictionary в словарь параметров конструктора типа ModelStateDictionary
ModelStateDictionary имеет конструктор, который принимает объект ModelStateDictionary. Это почему / где происходит ошибка? Если это так, то как мне разрешить это, так как ModelStateDictionary не является объектом n, который я могу напрямую изменить.
Оригинал
Я пытался заставить работать установку внедрения зависимостей для моих контроллеров в приложении asp.net mvc. Но в итоге я получаю циклическую зависимость от System.Web.Mvc.ModelStateDictionary. Я провел некоторые поиски ... здесь и здесь и другие, и я попробовал некоторые из предложений, таких как создание собственности (возможно, я просто не знаю, где разместить их) вместо того, чтобы передавать его через конструктор. Однако мне кажется, что у ninject возникла проблема с классом или определением 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>();
Пожалуйста, дайте мне знать, если я смогу предоставить больше информации ... Сначала я пытался использовать structmap, но не мог заставить DI работать ... Кажется, по крайней мере, я настроил и работал по большей части ninject ,
Спасибо