在我正在处理的应用程序中,我们有一些操作会在将新实体添加到存储库时触发。其中一个新操作应该是在对象进入时使用服务(如在服务层,而不是以太网中某处的Web服务)来执行一些业务规则操作。
这一切都很好,但是应该使用的确切服务将根据我们正在操纵的实体的属性而变化(基本上,基于与实体相关的客户)。我想保持行动松散地与它可能需要调用的服务风格相结合。
我正在考虑做的是实施一个接受该实体并返回正确服务的工厂。不过,这看起来有些愚蠢。有没有更好的方法来设置它?
我曾考虑使用IoC容器在运行时确定正确的实现,但快速阅读一对(Ninject和Windsor)似乎并不表示它们非常适合这种操作。
答案 0 :(得分:0)
我建议您仔细查看MEF (Managed Extensibility Framework)。这提供了一种非常不可知的松耦合,它紧密地(如果不完全)符合您的要求。
答案 1 :(得分:0)
你以错误的方式接近这一点。您应该使用以下事件:
// your repository event
public class ItemCreated<T>
{
}
处理程序:
public class DoSomething : ISubscribeOn<ItemCreated<User>>
{
public class DoSomething(ISomeService)
{}
}
请注意,它不是服务本身,而是订阅该事件的中间人。它使事情变得不那么分离。
所有这些内置于我的IoC容器中:http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container
向下滚动到域事件。
答案 2 :(得分:0)
我认为对于这次迭代,我们将保持简单并使用工厂选择适当的接口(即我认为原始帖子中的“kludgy”解决方案)。感谢您的所有反馈!