我在带有服务层 - 存储库(Nhibernate)的 MVC3 应用程序中使用 Spring.Net 作为我的 DI。
在我的服务层中,我正在使用责任链模式并希望初始化一组规则(实现公共接口 Rule1、Rule2、Rule3 的对象)。实现规则的每个类都与名称一起存储在 DB 中,并且可以添加或删除。示例
规则 1:IRule 规则 2:IRule
规则 3:
IRule
在我的 Spring 配置中,我定义了类名作为 Id 的所有规则。
在我的服务层中,我提取所有规则名称,并且必须初始化每个规则并根据顺序依次执行规则。我的服务层代码不应该与 Spring 绑定,因此我不想在这里使用服务定位器模式。
我想访问下面的每个规则。通过规则工厂对象。
public class ServiceLayer
{
public Constructor ServiceLayer(IRuleFactory ruleFactory)
{
//Rule factory injected using Spring
}
var rules = fetchRulesFromRepoitory();
foreach( rule in rules)
{
var ruleclass = ruleFactory.GetObject("rule.Name");
ruleclass.Execute();
}
}
在 rulefactory 内部,访问已在配置中定义的规则对象的最佳方法是什么。我的意思是我的 rulefactory 最终是否应该使用
IApplicationContext.GetObject("Rule1")
这再次意味着我在这里与春天联系在一起。我想在 spring 中以 FactoryObject 的形式提供了一些支持我不确定是否可以将其配置为返回对已由 Spring 框架使用 Id 初始化的每个 Rule 对象的访问权限??..
或者是否有当要创建动态对象时更好的做事方式..