Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为每个国家/地区开发一个模块略有不同的解决方案_C#_Design Patterns_Software Design - Fatal编程技术网

C# 为每个国家/地区开发一个模块略有不同的解决方案

C# 为每个国家/地区开发一个模块略有不同的解决方案,c#,design-patterns,software-design,C#,Design Patterns,Software Design,目前,我正在开发两个非常相似的解决方案(第一个用于国家A,第二个用于国家B)。我正在使用wpf、c#、mvvm和sql server 有些模块在每个解决方案中都是相同的,有些部分不同(例如,有些类有附加的字段或方法),有些完全不同(例如,VAT模块)。对我来说,开发完全独立的解决方案不是最好的解决方案(时间成本) 所以,我想创建两个解决方案(A和B),它们只包含主屏幕,我在主屏幕上准备用户界面。然后,在第三种解决方案(C)中,我将有一个项目(=模块),并从A或B链接它们 如果两个版本的模块相同-

目前,我正在开发两个非常相似的解决方案(第一个用于国家A,第二个用于国家B)。我正在使用wpf、c#、mvvm和sql server

有些模块在每个解决方案中都是相同的,有些部分不同(例如,有些类有附加的字段或方法),有些完全不同(例如,VAT模块)。对我来说,开发完全独立的解决方案不是最好的解决方案(时间成本)

所以,我想创建两个解决方案(A和B),它们只包含主屏幕,我在主屏幕上准备用户界面。然后,在第三种解决方案(C)中,我将有一个项目(=模块),并从A或B链接它们

如果两个版本的模块相同-没有问题。如果它是完全不同的-好的,我必须独立开发它。但是,问题是如何设计略有不同的模块

我是否应该使用抽象工厂设计模式,将所有相同的内容放入抽象产品中,并在具体产品中放入其他字段/方法?对于WPF表单,我不能使用这种模式-我必须为每个版本开发一个表单


Thx.

您真正想要使用的是依赖注入

首先,您创建一个接口,然后让您的具体IMPL在每个国家实现该接口

interface ISolution
{
....
}

class CountryA : ISolution{
...
}


class CountryB : ISolution{
...
}
然后将这些接口注册到compositionroot的impl映射

private static IContainer ConfigureDependencies() {
            return new Container(x =>{
                x.For<ISolution>().Use<CountryA>();

            });
        }
专用静态IContainer配置依赖项(){
返回新容器(x=>{
x、 For().Use();
});
}
然后你要求容器给你一个隔离实例。它将为您提供正确的impl

你也可以为CountryB做同样的事情

您可以有自动布线或后期绑定,更具动态性。您可以切换impls

以structuremap为例