Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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/5/sql/71.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# 在多个ninject绑定中重用SqlConnection_C#_Sql_Dependency Injection_Ninject_Sqlconnection - Fatal编程技术网

C# 在多个ninject绑定中重用SqlConnection

C# 在多个ninject绑定中重用SqlConnection,c#,sql,dependency-injection,ninject,sqlconnection,C#,Sql,Dependency Injection,Ninject,Sqlconnection,TLDR:如何在Ninject绑定中重新使用或实例化新的Sql连接对象****由于SqlConnection未初始化,第二个绑定失败****。我假设我不能跨多个绑定共享sql连接 我有一个采用这种模式的Sql存储库: public class SqlRepository<T> : DataConnection, IRepository<T> where T : new() { public SqlRepository(IDbConnection connectio

TLDR:如何在Ninject绑定中重新使用或实例化新的Sql连接对象****由于SqlConnection未初始化,第二个绑定失败****。我假设我不能跨多个绑定共享sql连接

我有一个采用这种模式的Sql存储库:

public class SqlRepository<T> : DataConnection, IRepository<T> where T : new() {
    public SqlRepository(IDbConnection connection) : base(connection)
}
我在一个类中的两个地方使用它,这取决于传递的参数类型,但是sql连接是相同的

public class WidgetsProvider {
    private readonly IRepository<Widget> _widgetsRepo;
    private readonly IRepository<Credential> _credentialRepo;

    public WidgetsProvider(IRepository<Widget> widgetsRepo, IRepository<Credential> credentialRepo) {
        _widgetsRepo = widgetsRepo;
        _credentialRepo = credentialRepo;
    }
}
公共类WidgetsProvider{
私人只读IRepository\u widgetsRepo;
私人只读电子存款凭证回购;
公共WidgetsProvider(IRepository widgetsRepo、IRepository credentialRepo){
_widgetsRepo=widgetsRepo;
_credentialRepo=credentialRepo;
}
}
以下是我的绑定:

public class WidgetIocModule : Ninject.Modules.NinjectModule {
    public override void Load() {
        //get the sql connection
        var sql = new SqlConnection(ConfigurationManager.ConnectionStrings["widgetsConn"].ToString());

        //bind to repos
        Bind<IRepository<Widget>>().To<SqlRepository<Widget>>().InSingletonScope().WithConstructorArgument("connection", sql);
        Bind<IRepository<Credential>>().To<SqlRepository<Credential>>().InSingletonScope().WithConstructorArgument("connection", sql);
    }
}
公共类WidgetIocModule:Ninject.Modules.Ninject模块{
公共覆盖无效负载(){
//获取sql连接
var sql=new-SqlConnection(ConfigurationManager.ConnectionStrings[“widgetsConn”].ToString());
//绑定回购协议
使用构造函数参数(“连接”,sql)将()绑定到().InSingletonScope();
使用构造函数参数(“连接”,sql)将()绑定到().InSingletonScope();
}
}

为SqlConnection创建绑定,而不是实例化绑定:

Bind<SqlConnection>().ToConstant(new SqlConnection(ConfigurationManager.ConnectionStrings["widgetsConn"].ToString()));

Bind<IRepository<Widget>>().To<SqlRepository<Widget>>().InSingletonScope().WithConstructorArgument("connection", context => Kernel.Get<SqlConnection>());
Bind<IRepository<Credential>>().To<SqlRepository<Credential>>().InSingletonScope().WithConstructorArgument("connection", context => Kernel.Get<SqlConnection>());
Bind().ToConstant(新的SqlConnection(ConfigurationManager.ConnectionStrings[“widgetsConn”].ToString());
Bind().To().InSingletonScope().WithConstructorArgument(“connection”,context=>Kernel.Get());
Bind().To().InSingletonScope().WithConstructorArgument(“connection”,context=>Kernel.Get());

我不确定发生了什么,但在第二次绑定期间,我收到了一个错误
”((System.Data.SqlClient.SqlConnection)\u connection)。ServerVersion“引发了类型为“System.InvalidOperationException”的异常
。这可能与我调用需要linq查询中的db的函数有关。
invalidoOperationException
在前几次成功调用后,显示{“ConnectionString属性尚未初始化。”}。Doh!这是正确答案(已接受)。另一个问题与我的
using(){}
子句处理和关闭连接有关。
Bind<SqlConnection>().ToConstant(new SqlConnection(ConfigurationManager.ConnectionStrings["widgetsConn"].ToString()));

Bind<IRepository<Widget>>().To<SqlRepository<Widget>>().InSingletonScope().WithConstructorArgument("connection", context => Kernel.Get<SqlConnection>());
Bind<IRepository<Credential>>().To<SqlRepository<Credential>>().InSingletonScope().WithConstructorArgument("connection", context => Kernel.Get<SqlConnection>());