![]() |
1
8
看起来循环引用与服务层依赖于控制器的模型状态和控制器依赖于服务层这一事实有关。 我必须重写我的验证层才能使它工作。这是我做的。 如下定义通用验证器接口:
我们希望能够返回validationState的实例,它显然定义了验证的状态。
请注意,我们有一个强类型错误集合,我们也需要定义它。集合将由validationError对象组成,这些对象包含要验证的实体的属性名以及与之关联的错误消息。这只遵循标准的ModelState接口。
下面是validationError的样子:
剩下的就是结构图魔法。我们需要创建验证服务层,它将定位验证对象并验证我们的实体。我想为此定义一个接口,因为我希望使用验证服务的任何人都完全不知道结构映射的存在。此外,除了引导程序逻辑之外,我认为在任何地方喷洒objectfactory.getInstance()都是一个坏主意。集中管理是确保良好的可维护性的好方法。无论如何,我在这里使用装饰图案:
我们最终实现了它:
我将在我的控制器中使用验证服务。我们可以将它移动到服务层,并让结构映射使用属性注入将控制器的ModelState实例注入到服务层,但我不希望服务层与ModelState耦合。如果我们决定使用另一种验证技术呢?这就是为什么我宁愿把它放在控制器里。以下是我的控制器的外观:
在这里,我使用structuremap注入服务层并验证服务实例。因此,我们需要在structuremap注册表中同时注册:
就这样。我不演示如何实现Postvalidator,但它只是实现IValidator接口并在validate()方法中定义验证逻辑。剩下要做的就是调用验证服务实例来检索验证程序,对实体调用validate方法并将任何错误写入ModelState。
希望我能帮上忙:) |
|
2
1
我使用了一个类似的解决方案,它涉及到ivalidationDictionary的通用实现者,它使用一个StringDictionary,然后将错误从这里复制回控制器中的模型状态。 validationDictionary接口
实现不引用模型状态或任何其他内容的验证字典,以便结构映射可以轻松创建它
在控制器中编写代码,将错误从字典复制到模型状态。作为控制器的扩展函数,这可能是最好的。
因此,引导代码是这样的
创建控制器的代码如下
|
![]() |
3
0
只需快速查询一下。这帮了我很大的忙,所以感谢你提出了答案,但我想知道在哪个名称空间存在帐篷?我看到Collection(Tentity)需要System.Collections.ObjectModel。我的文件编译时没有任何进一步的内容,但我看到您的Tentity引用以蓝色突出显示,这表明它具有类类型,我的在Visual Studio中是黑色的。希望你能帮忙。我很想把这个工作做好。 您是否找到了将验证分离到服务层的方法?我的直觉告诉我,在控制器中验证有点难闻,但是我一直在寻找一种方法来将验证错误消息传递回控制器,而不将服务层与控制器紧密耦合,因此找不到任何东西。:( 再次感谢你的出色表现! 劳埃德 |
![]() |
M.Sabzi · 如何在应用层实现随子集合创建? 7 年前 |
![]() |
JJ Yong · 继承的通用存储库问题 7 年前 |
![]() |
Utku · 实体框架,从多个表中获取数据并选择要显示的列 7 年前 |
![]() |
koryakinp · 基于实体类型的通用存储库应用过滤器 7 年前 |
![]() |
Pedro Lopes · 尝试通过存储库编辑数据库中的数据时获取验证 7 年前 |
![]() |
The Huff · IOption模式-单元测试和通过层 7 年前 |