0

在我正在处理的应用程序中,我们有在将新实体添加到存储库时触发的操作。其中一项新操作应该是使用服务(如服务层,而不是以太网中的某处的 Web 服务)在对象进入时执行一些业务规则操作。

这一切都很好,但应该使用的确切服务将根据我们正在操作的实体的属性而有所不同(基本上,基于实体与哪个客户相关)。我想让动作与它可能需要调用的服务风格保持松散耦合。

我正在考虑做的是实现一个接受实体并返回正确服务的工厂。不过,这似乎有点笨拙。有没有更好的方法来设置它?

我曾考虑在运行时使用 IoC 容器来确定正确的实现,但快速阅读一对(Ninject 和 Windsor)似乎并不表明它们非常适合这种操作。

4

3 回答 3

0

我建议您仔细查看MEF(托管可扩展性框架)。这提供了一个非常不可知的松散耦合,非常符合您的要求(如果不完全符合)。

于 2012-09-20T20:34:52.070 回答
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

向下滚动到域事件。

于 2012-09-21T10:15:56.987 回答
0

我认为对于这次迭代,我们将保持简单并使用工厂来选择正确的界面(即我认为在原始帖子中“kludgy”的解决方案)。感谢所有的反馈!

于 2012-09-24T12:53:20.063 回答