Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# ASP.NET MVC中的多类实例化或更改公共属性_C#_Asp.net Mvc_Oop - Fatal编程技术网

C# ASP.NET MVC中的多类实例化或更改公共属性

C# ASP.NET MVC中的多类实例化或更改公共属性,c#,asp.net-mvc,oop,C#,Asp.net Mvc,Oop,我需要使用不同的构造函数访问我的业务层对象4次 具体来说,我需要通过单独的数据访问层访问4个不同的后端系统 我应该怎么做: 1) 用不同的构造函数实例化4个独立的对象 2) 每次实例化一个对象并更改公共属性 由于我现在在HomeController中,我有以下几点: var obj = new BarcodeBLL(new ERPConfig { AS400ControlLibrary = ConfigurationManager.AppSettings["ControlLibrary"

我需要使用不同的构造函数访问我的业务层对象4次

具体来说,我需要通过单独的数据访问层访问4个不同的后端系统

我应该怎么做:

1) 用不同的构造函数实例化4个独立的对象

2) 每次实例化一个对象并更改公共属性

由于我现在在HomeController中,我有以下几点:

var obj = new BarcodeBLL(new ERPConfig
{
    AS400ControlLibrary = ConfigurationManager.AppSettings["ControlLibrary"],
    AS400Library = ConfigurationManager.AppSettings["DataLibrary"],
    ConnectionString = ConfigurationManager.ConnectionStrings["AS400"].ConnectionString
});

对我来说,遵循#2似乎是显而易见的,但我想知道我是否正确以及为什么

如果你有4个相同的系统,那么用一个类来表示这样的系统似乎是合乎逻辑的。当需要访问其中一个系统时,可以实例化此类型,并将正确的连接字符串传递给构造函数


您可能希望隐藏工厂后面或DI容器配置中实际使用的连接字符串的详细信息。

您所说的“…并每次更改公共属性”是什么意思?因为唯一允许我访问正确数据层的是连接字符串,我的意思是能够以某种方式更改连接字符串,并允许业务层访问正确的服务器。那么,您是说您有4个相同的系统可以通过不同的连接字符串访问?是的,我有4个AS400系统(非unicode)我需要能够连续运行相同的DAL方法4次。我应该有一个对象还是4个对象?你可能应该有4个对象。如果只有一个对象,那么该对象究竟代表什么?它是否会违反单一责任原则(可能违反,也可能不违反,取决于4个系统如何变化)?另一方面,如果您只是调用这一个方法,则可能需要一个(可能)静态方法,将连接字符串和其余必需参数一起传递。在不了解更多设置的情况下,很难说你应该朝哪个方向走。这4个系统是相同的,它们具有相同的更改管理例程。这不是一个我必须调用的方法,有很多。我认为4个对象是最好的选择,我想知道这是多么昂贵,资源明智,除非你在一个紧密的循环中进行,否则实例化4个简单对象并在web.config中查找一些信息的成本可以忽略不计。如果您在类型的构造函数中执行各种昂贵的工作,那当然是另一回事了。