0

所以这里是问题:

我的应用程序中有一些逻辑会因客户端而异。什么是最好的方法来构建它,以便可以在不更改任何代码的情况下对其进行配置。我已经在配置中添加了一个 appsetting,如下所示:

<add key="MyCalculationType" value="MyApp.Client1.Calculation,MyApp.Client1" />

在我的核心业务逻辑中:

ICalculation abcCalculation = CalculationFactory.GetManager(); // Uses appsetting to get type

abcCalculation.Calculate(this);

我添加了一个名为 MyApp.Client1 的新项目,我希望它包含计算的客户端特定实现。

namespace MyApp.Client1
{
    public class Calculation : ICalculation
    {
        public void Calculate(Order o)
        {
            // Calculate properties of order
        }
    }
}

我还没有完成,所以我无法提供任何输出。在这个阶段,我想知道,在我走得更远之前,是否有更好的方法来实现我想要的。我不确定的一件事是放置 ICalculation 接口的位置。我认为我拥有它的方式可能会产生循环引用错误。

非常感谢

编辑

正如我所怀疑的,ICalculation 接口阻止了我构建。虽然没有循环参考错误;出现“无法解析符号”错误。

4

2 回答 2

1

ICalculation接口可以在您的ConnectorBridge库中,该库管理外部插件与主机环境的访问、订阅和通信。

您的应用程序和(例如)计算项目都包含对ConnectorBridge的引用。通过这种方式,Calculation 可以实现一个ICalculation接口,并且应用程序可以访问抽象。

在您的应用程序中创建一个文件夹,例如插件 ,并在您的应用程序启动时扫描该文件夹的内容以查找实现ICalculation接口的 DLL 的 where is present 类型。一旦找到类型(在这种特定情况下为计算器),它就会被创建并保存在应用程序中以供将来执行。

这些只是一些想法,但具体实施自然需要更多的工作。

希望这可以帮助。

于 2012-07-03T13:54:53.790 回答
0

如果你真的需要做那种事情,你应该寻找一个适当的控制反转容器。我更喜欢NInject,因为它非常强大且可配置。

于 2012-07-03T13:51:37.857 回答