2

我是温莎城堡的新手,我只是使用最新版本。我已经为我的存储库创建了运行良好的条目,但是我有一个最终依赖项,我将其传递到我的控制器中。

我创建了一个继承自 IValidationDictionary 的 ModelStateWrapper。ModelStateWrapper 在其构造函数中采用 ModelStateDictionary ,因此在我的代码中,我可以将以下内容作为示例传递:

IMembershipService _memSvc;
IValidationDictionary _validationService;

public AccountController()
{
    _validationService = new ModelStateWrapper(this.ModelState);
    _memSvc = new MembershipService(_validationService);
}

在我的测试中,我可以使用 Moq 执行此操作:

var v = new Mock<ModelStateDictionary>();
_validationService = new ModelStateWrapper(v.Object);
_service = new MembershipService(_validationService);

我似乎无法让 Castle 用 ModelStateWrapper 注入 ModelState。我不知道从哪里开始,似乎我不能只是“忽略它”并尝试手动注入,因为 Castle 正在搜索依赖项并向我抛出一个错误,说存在依赖项。

如何配置 Castle Windsor 以使用基于 IValidationDictionary 的 ModelStateWrapper 并将 ModelState 作为构造函数参数?

劳埃德

4

2 回答 2

1

看起来你有一个循环依赖(从来都不是一件好事)。您可以使用这个非常相似的问题中描述的抽象工厂来解决它。

但是,尽管您可以像这样解决问题,但最好重新设计 API 以使循环依赖消失。循环依赖通常表明存在设计缺陷。

于 2010-01-16T11:01:30.983 回答
0

你做错了,你的错误与你使用的容器无关。

如果您绝对需要,就这样做:

public AccountController(IValidationService service)
{
    _validationService = service;
    _memSvc = new MembershipService(_validationService); 
}

然后在注册组件时,使用 OnCreate 方法:

container.Register(
   Component.For<AccountController>()
   .WheveverEleseYouNeedHere()
   .OnCreate((k, controller) => 
      controller.ValidationService.Init(controller.ModelState)));
于 2010-01-16T13:09:03.733 回答