Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# MEF、实体框架和构造函数注入_C#_Entity Framework_Mef - Fatal编程技术网

C# MEF、实体框架和构造函数注入

C# MEF、实体框架和构造函数注入,c#,entity-framework,mef,C#,Entity Framework,Mef,第一次问问题,长时间的读者 我们有一个新的应用程序,它大量使用MEF和DI(通过构造函数参数注入)来处理对象实例化。我们正在努力的一个领域是EF上下文创建。要创建EF上下文,您需要一个conn字符串(例如在app.config中)。但我们的应用程序让用户在启动时提供服务器/db(以及用户名/密码)。所以问题是,我们如何使用MEF用默认的conn字符串实例化EF上下文,然后在登录后用用户提供的值替换conn字符串,然后在MEF容器中更新它 到目前为止,我们处理它的唯一方法是在LoginViewMo

第一次问问题,长时间的读者

我们有一个新的应用程序,它大量使用MEF和DI(通过构造函数参数注入)来处理对象实例化。我们正在努力的一个领域是EF上下文创建。要创建EF上下文,您需要一个conn字符串(例如在app.config中)。但我们的应用程序让用户在启动时提供服务器/db(以及用户名/密码)。所以问题是,我们如何使用MEF用默认的conn字符串实例化EF上下文,然后在登录后用用户提供的值替换conn字符串,然后在MEF容器中更新它

到目前为止,我们处理它的唯一方法是在LoginViewModel中使用IoC.Get类型调用将现有实体对象从容器中拉出,然后使用新值设置其连接字符串。然后,MEF使用这个新字符串向前移动,并在应用程序周围注入上下文时自动创建/处理上下文

值得关注的是,除了MEF+DI+容器使用等其他问题外,还存在服务定位器的气味(并且发生在组合根目录之外)。许多评论者指出,盲目坚持一种模式会导致灾难。问题是,这是否是处理这种情况的适当方法?我们应该使用创建的抽象工厂,然后使用它来创建上下文吗


当在应用程序的引导部分创建上下文,并且在登录时提供新的conn字符串时已经实例化上下文时,如何替换EF的连接字符串?MEF通常会重复创建/处理上下文-那么如何设置新的conn字符串呢?我们使用共享策略创建上下文部分,因此理论上只有一个上下文部分,而且不会被销毁,因此只需更新conn字符串就可以了。

基于MVC Azure的多租户应用程序也面临类似的情况,我们通过导出一个方法来解决这个问题,该方法从请求数据库操作的用户的活动会话中获取当前连接字符串

导出方法从MVC会话详细信息中抽象DbContext,只需在DbContext或IRepository实现中导入导出的方法

不要使用属性导出,导出属性时,其值由MEF保存,不会获取活动会话中存储的当前值。方法导出将使您能够获取活动会话中存储的连接字符串的当前值


如果您需要更多说明,请告诉我。

我们在基于多租户MVC Azure的应用程序中遇到了类似的情况,我们通过导出一个方法来解决问题,该方法从请求数据库操作的用户的活动会话中获取当前连接字符串

导出方法从MVC会话详细信息中抽象DbContext,只需在DbContext或IRepository实现中导入导出的方法

不要使用属性导出,导出属性时,其值由MEF保存,不会获取活动会话中存储的当前值。方法导出将使您能够获取活动会话中存储的连接字符串的当前值

如果你需要更多的澄清,请告诉我