2012-07-03 26 views
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接口阻止我构建。虽然没有循环引用错误;与“无法解析符号”错误。

回答

1

ICalculation接口可以是你ConnectorBridge库,管理访问,订阅新资料并与主机环境外部插件的通信内。

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

创建应用程序中的一个文件夹,说插件和您的应用程序的启动您扫描该文件夹中的DLL的内容,其中为实现ICalculation接口目前类型。一旦发现该类型(计算器在此特定情况下),它就创建并保存在应用程序中供将来执行。

这些只是想法的共同点,但具体实现,自然需要更多的工作。

希望这会有所帮助。

+0

试试这个,让你知道它是如何发生的。 – Kev

0

如果你真的需要做这样的事情,你应该看看适当的Inversion of Control容器。我更喜欢NInject,因为它非常强大且非常易于配置。

+0

这是一个相当大的项目。使用NInject会有很多工作吗? – Kev

+0

它可以,但它足够简单。 @Tigran有一个很好的主意,可以很好地依赖注入。 – bluevector