我使用 Ninject 为每个请求使用相同的数据库连接。我们有一个名为 RosterProcess 的路由,它是根内部的另一个 Web 应用程序,但使用相同的代码库,因此我们可以拥有两个不同的应用程序池。我相信应用程序池会导致线程问题,因为我们在此过程中抛出了一些线程。InThreadScope 可以工作,但这会在数据库中打开多个连接,而不是只使用一个。我收到以下错误,不知道为什么?
全球.asax
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory<MySqlConnection>>().InRequestScope().WithConstructorArgument("connectionString", Config.Data.MySQLConnection);
工厂
public class DatabaseFactory<T> : Disposable, IDatabaseFactory where T : IDbConnection, new()
{
private readonly string _connectionString;
private IDbConnection _dataConnection;
public DatabaseFactory(string connectionString)
{
_connectionString = connectionString;
}
#region IDatabaseFactory Members
public IDbConnection Get()
{
return _dataConnection ?? (_dataConnection = new T { ConnectionString = _connectionString });
}
#endregion
protected override void DisposeCore()
{
if (_dataConnection != null)
_dataConnection.Dispose();
}
}
你调用的对象是空的。在 MySql.Data.MySqlClient.MySqlDataReader.Close() 在 MySql.Data.MySqlClient.MySqlConnection.Close() 在 MySql.Data.MySqlClient.MySqlConnection.Dispose(Boolean disposing) 在 System.ComponentModel.Component.Dispose() 在 CL .NatGeo.Dashboard.Data.Infrastructure.DatabaseFactory
1.DisposeCore() at CL.NatGeo.Dashboard.Data.Infrastructure.Disposable.Dispose() at Ninject.Activation.Strategies.DisposableStrategy.<Deactivate>b__0(IDisposable x) at Ninject.Activation.InstanceReference.IfInstanceIs[T](Action
1 action) 在 Ninject.Activation.Strategies.DisposableStrategy.Deactivate(IContext context, InstanceReference reference) 在 Ninject.Activation.Pipeline.<>c_ DisplayClass6.b _4(IActivationStrategy s) 在 Ninject .Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable1 series, Action
1 个动作)在 Ninject.Activation.Pipeline.Deactivate(IContext 上下文,InstanceReference 参考)在 Ninject.Activation.Caching.Cache.Forget(CacheEntry 条目)在 Ninject.Activation.Caching.Cache.Forget(IEnumerable1 cacheEntries) at Ninject.Activation.Caching.Cache.Clear(Object scope) at Ninject.OnePerRequestModule.<>c__DisplayClass5.<DeactivateInstancesForCurrentHttpRequest>b__3(ICache cache) at Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable
1 系列,Action`1操作)在 Ninject.OnePerRequestModule.DeactivateInstancesForCurrentHttpRequest() 在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.IExecutionStep.Execute() 在 Ninject.OnePerRequestModule.b__0(Object o, EventArgs e) 在 System.Web.HttpApplication。 ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)