0

我正在尝试创建一个具有特定要求的模块(将在一个简单的 ASP 站点中引用,使用 Autofac Web 表单集成)。它应该返回使用一组特定规则创建的字符串。这些规则由策略定义,每个“参与者”都不同。“Actor”将在运行时根据来自请求的值进行选择。为了让事情变得更难,一些“演员”可以根据请求的国家/地区等不同的具体实施策略。

我已经使用抽象和具体工厂解决了这个问题(第一个了解使用哪个“演员”具体工厂,第二个确定我是否需要特定或通用演员的策略)。问题是,在采用了强模块化设计后,我需要使用反射来获得对特定参与者策略类的间接引用(否则我应该引用包含所有特定策略实现的所有 dll)。

我很想避免这种方法,主要是因为我想使用一种独特的方式来动态加载所需的组件。

我已经查看了一些 Autofac 的可能性,据我所知,我可以注册同一接口的不同实现并使用此处解释的密钥解决它们(https://code.google.com/p/autofac /wiki/TypedNamedAndKeyedServices)。问题是我不知道如何在我的抽象和具体工厂中解决它们(我没有提到那里的解析器......我认为我应该避免它)。

所以我的问题是:

1)我如何在那种情况下使用 Autofac?什么是最佳实践(我肯定错过了一些巨大的东西)

2) 我必须重新考虑这个模块的所有设计吗?我的意思是,我还需要使用抽象工厂和具体工厂吗?

3)谁能指出一些可能与我的问题有关的示例或教程?

非常感谢您的帮助,对于这个冗长且不太清楚的问题,我们深表歉意。

4

1 回答 1

1

一种可能的方法是将您的策略​​分为通用策略和特定于参与者的策略。您已经在脑海中做到了这一点,但我不知道您的代码是否反映了这一点。

  • 有两个接口IActorSpecificStrategyIGenericStrategy.
  • 将方法添加bool CanHandleActor(IActor actor)到两个接口(或两个派生自的接口)。
  • 将两个枚举注入到您的工厂中:一个包含IActorSpecificStrategy,一个包含IGenericStrategy.
  • 当请求参与者的策略时,首先枚举所有IActorSpecificStrategy实例并返回第一个返回的CanHandleActor实例true。否则,返回第一个IGenericStrategy返回CanHandleActortrue

如果这不适用于您的问题,请更详细地说明如何选择策略。

于 2013-04-12T11:34:39.857 回答