我正在将 DbContext 注册到TinyIoCContainer
传递ConfigureRequestContainer
给DefaultNancyBootstrapper
.
虽然这很好用,但我注意到Dispose
一旦请求完成,上下文中的方法就不会被调用。我希望 DbContext 在请求关闭连接后被处理(我们正在使用 SQLite)。
问:一次性实例是否真的在 TinyIoCContainer 中的请求结束时被丢弃?
引导程序
protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)
{
base.ConfigureRequestContainer(container, context);
container.Register<IContext>((_,__) =>
{
// Code here to get connection string
return new Context(new SQLiteConnection(connString), true);
});
}
语境
public interface IContext : IDisposable
{
...
}
public class Context : DbContext, IContext
{
...
public new void Dispose()
{
base.Dispose(); // This never gets called
}
}
更新
标记的答案最终是正确的。我基本上不得不做这样的事情:
if (string.IsNullOrEmpty(context.Request.UserHostAddress))
{
container.Register<IContext>((_,__) => null);
}
else
{
// Get username from request headers
// Build up SQLite connection string based off username
var dbContext = new Context(new SQLiteConnection(connString));
container.Register<IContext>(dbContext);
}