使用连接字符串和精简程序时如何在运行时更改初始目录

埃里克鲁尼亚

我正在编写一个MVC C#应用程序。我使用dapper作为轻量级的ORM。我的连接字符串是通过服务器和初始目录定义的,当前,如果我需要访问其他数据库,则可以定义另一个连接字符串,并使用Ninject绑定根据要注入的管理器使用特定的连接字符串,如下所示:

public class NinjectBindings : NinjectModule
{
    public override void Load()
    {
        Bind<IDbConnection>().To<SqlConnection>()
           .WhenInjectedInto<DashboardManager>()
           .InRequestScope()
           .Named("myDashboard")
           .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["dbDashboard"].ConnectionString);

        Bind<IDbConnection>().To<SqlConnection>()
           .WhenInjectedInto<ScoreboardManager>()
           .InRequestScope()
           .Named("myScoreboard")
           .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["dbScoreboard"].ConnectionString);

    }
}

不幸的是,如果我在同一管理器中有代码需要调用与最初指定的目录不同的数据库上的存储过程,则此方法将无效。

问题是:我是否可以只定义一个连接字符串,丢失上面所有的ninject绑定内容,然后简单地将Initial Catalog更改为一个指向其他数据库的节点?

霍曼巴林

你既需要NamedWhenInjectedInto约束您的绑定?

我相信您有一个需要两个connectionstrings的类,可以使用Named绑定来实现

Bind<IDbConnection>().To<SqlConnection>()
   .InRequestScope()
   .Named("myDashboard")
   .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["dbDashboard"].ConnectionString);

Bind<IDbConnection>().To<SqlConnection>()
   .InRequestScope()
   .Named("myScoreboard")
   .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["dbScoreboard"].ConnectionString);

您的班级可以同时获得两个连接:

public class ClassWith2DbDependency // <-- I would question this class for SRP violation
{
    private readonly IDbConnection _dashboardConnection;
    private readonly IDbConnection _scoreboardConnection;

    public ClassWith2DBDependency(
        [Named("myDashboard")] IDbConnection dashboardConnection
        [Named("myScoreboard")] IDbConnection scoreboardConnection)
    {
        _dashboardConnection = dashboardConnection;
        _scoreboardConnection = scoreboardConnection;
    }

    public void WriteTo2Dbs()
    {
        // execute dashboard DB procedure
        // execute scoreboard DB procedure
    }
}

我是否可以只定义一个连接字符串,丢失上面所有的ninject绑定内容,然后简单地将“初始目录”更改为一个指向其他数据库的节点?

更改Initial Catalog不会影响现有的SqlConnection可以自己管理依赖项,但是您仍然需要2 connectionstrings:

public class ClassWith2DbDependency
{
    public void WriteTo2Dbs()
    {
        var dashboardCon = ConfigurationManager.ConnectionStrings["dbDashboard"].ConnectionString;
        using (SqlConnection connection = new SqlConnection(dashboardCon))
        {
            // execute dashboard DB procedure
        }

        var scoreboardCon = ConfigurationManager.ConnectionStrings["dbScoreboard"].ConnectionString;
        using (SqlConnection connection = new SqlConnection(scoreboardCon))
        {
            // execute scoreboard DB procedure
        }
    }
}

但是,我推荐这种方法,因为上述类具有不透明的依赖关系,因此违反了DI原理


我还没有看到您的代码,但是听起来好像您不是在使用Repository Pattern吗?这可能是一个不错的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在运行时更改NLog目标的连接字符串?

来自分类Dev

如何在运行时在EF7 Core中更改连接字符串?

来自分类Dev

Dapper 在运行时更改连接字符串

来自分类Dev

在运行时使用连接字符串

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

如何在运行时使用持有其名称的字符串访问常量字符串?

来自分类Dev

使用实体框架,依赖注入,工作单元和存储库模式在运行时注入/管理更改连接字符串

来自分类Dev

Azure Web服务-在运行时更改数据库连接字符串

来自分类Dev

实体框架-在运行时更改连接字符串(需要解释)

来自分类Dev

在运行时更改连接字符串–这是正确的方法吗?

来自分类Dev

在EF 6中在运行时更改连接字符串

来自分类Dev

C#在运行时更改自定义连接字符串

来自分类Dev

EF6在运行时更改连接字符串

来自分类Dev

如何在运行时更改微调器的字符串数组如何在if语句中使用微调器的选定项目(eclipse中的Android)

来自分类Dev

如何在运行时将字符串数组存储到单个应用程序设置属性?

来自分类Dev

EF Core和LINQ-如何在运行时使用字符串变量构建动态的Where子句?

来自分类Dev

如何在运行时将字符串转换为代码

来自分类Dev

如何在运行时在Objective-C中查找字符串常量?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时将用户提供的字符串映射到对象属性?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时更改android应用程序的名称和图标?

来自分类Dev

如何在运行时更改android应用程序的名称和图标?

来自分类Dev

使用Gunicorn运行时如何在运行时更改flask配置变量

来自分类Dev

SQLite EF6在运行时以编程方式设置连接字符串

来自分类Dev

对于每个调用,在运行时将连接字符串传递给Entity Framework

来自分类Dev

在运行时设置数据库连接字符串

来自分类Dev

实体框架在运行时设置连接字符串

Related 相关文章

  1. 1

    如何在运行时更改NLog目标的连接字符串?

  2. 2

    如何在运行时在EF7 Core中更改连接字符串?

  3. 3

    Dapper 在运行时更改连接字符串

  4. 4

    在运行时使用连接字符串

  5. 5

    Castle和NLog在运行时更改连接字符串

  6. 6

    Castle和NLog在运行时更改连接字符串

  7. 7

    如何在运行时使用持有其名称的字符串访问常量字符串?

  8. 8

    使用实体框架,依赖注入,工作单元和存储库模式在运行时注入/管理更改连接字符串

  9. 9

    Azure Web服务-在运行时更改数据库连接字符串

  10. 10

    实体框架-在运行时更改连接字符串(需要解释)

  11. 11

    在运行时更改连接字符串–这是正确的方法吗?

  12. 12

    在EF 6中在运行时更改连接字符串

  13. 13

    C#在运行时更改自定义连接字符串

  14. 14

    EF6在运行时更改连接字符串

  15. 15

    如何在运行时更改微调器的字符串数组如何在if语句中使用微调器的选定项目(eclipse中的Android)

  16. 16

    如何在运行时将字符串数组存储到单个应用程序设置属性?

  17. 17

    EF Core和LINQ-如何在运行时使用字符串变量构建动态的Where子句?

  18. 18

    如何在运行时将字符串转换为代码

  19. 19

    如何在运行时在Objective-C中查找字符串常量?

  20. 20

    如何在运行时将java中的字符串参数作为参数传递

  21. 21

    如何在运行时将用户提供的字符串映射到对象属性?

  22. 22

    如何在运行时将java中的字符串参数作为参数传递

  23. 23

    如何在运行时更改android应用程序的名称和图标?

  24. 24

    如何在运行时更改android应用程序的名称和图标?

  25. 25

    使用Gunicorn运行时如何在运行时更改flask配置变量

  26. 26

    SQLite EF6在运行时以编程方式设置连接字符串

  27. 27

    对于每个调用,在运行时将连接字符串传递给Entity Framework

  28. 28

    在运行时设置数据库连接字符串

  29. 29

    实体框架在运行时设置连接字符串

热门标签

归档