編輯
我很困惑的特定部分是錯誤。ModelStateDictionary循環依賴注入循環錯誤
5)依賴ModelStateDictionary注射入型的構造ModelStateDictionary
ModelStateDictionary具有接受一個ModelStateDictionary對象的構造的參數字典。這是爲什麼/哪裏出現錯誤?如果是這樣,我該如何解決它,因爲ModelStateDictionary不是我可以直接修改的n個對象。
原始
我一直試圖讓依賴注入設置爲我控制器在一個asp.net MVC應用程序上工作。但是我最終得到了System.Web.Mvc.ModelStateDictionary的循環依賴。我做了一些搜索... here和here和別人,我已經嘗試了一些像創建一個屬性的建議(也許我只是不知道在哪裏放置它們),而不是將其通過構造函數。然而,在我看來,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>();
請讓我知道如果我能提供任何更多信息...我最初嘗試使用structuremap但無法讓DI工作...我似乎至少有ninject設置和工作的大部分。
感謝,
向我們展示了'ModelStateWrapper'的代碼。 – Steven 2012-02-25 09:02:57
道歉Steven,我想我已經加入了它。我現在添加了它。 – 2012-02-25 19:33:48