所以这就是问题所在:
我的应用程序中有一些逻辑在客户端基础上会有所不同。构建此结构的最佳方法是什么,以便可以在不更改任何代码的情况下对其进行配置。我已经在配置中添加了一个appsetting,如下所示:
<add key="MyCalculationType" value="MyApp.Client1.Calculation,MyApp.Client1" />
在我的核心业务逻辑中:
ICalculation abcCalculation = CalculationFactory.GetManager(); // Uses appsetting to get type
abcCalculation.Calculate(this);
我添加了一个名为MyApp.Client1的新项目,我想要包含客户特定的Calculate实现。
namespace MyApp.Client1
{
public class Calculation : ICalculation
{
public void Calculate(Order o)
{
// Calculate properties of order
}
}
}
我还没有完成,所以我无法提供任何输出。在这个阶段,我想知道,在我进一步讨论之前,是否有更好的方式来实现我想要的东西。我不确定的一件事是放置ICalculation接口的位置。我认为我的方式可能会给出循环引用错误。
非常感谢
修改
我怀疑,ICalculation界面阻止我建立。虽然没有循环参考错误;带有“无法解决符号”错误。
答案 0 :(得分:1)
ICalculation
接口可以位于 ConnectorBridge 库中,该库管理外部插件与主机环境的访问,订阅和通信。
您的应用程序和(比方说)计算项目都包含对 ConnectorBridge 的引用。通过这种方式,Calculation可以实现ICalculation
接口,并且appliaction可以访问抽象。
在您的应用程序中创建一个文件夹,例如插件,在您的应用程序启动时,您扫描该文件夹的内容以查找DLL的实现ICalculation
接口的当前类型。一旦找到类型(在这个特定情况下为计算器),它就会被创建,并保存在应用程序中以供将来执行。
这些只是一个想法的混合,但具体的实现,自然需要更多的工作。
希望这有帮助。
答案 1 :(得分:0)
如果你真的需要做那种事情,你应该找一个合适的Inversion of Control容器。我更喜欢NInject,因为它非常强大且非常易于配置。