我正在尝试使用AspNetCore rc1。我也在使用Microsoft.AspNet.SignalR.Server: 3.0.0-rc1-final
和' EntityFramework.Core:7.0.0-rc1-final'。我需要从SignalR hub OnDisconnected
事件更新数据库。为此,我试图将我的UnitOfWork直接注入hubs构造函数。
public class ReceiptsHub : Hub
{
public IUnitOfWork<string> UnitOfWork { get; set; }
public ReceiptsHub(IUnitOfWork<string> unitOfWork) : base()
{
UnitOfWork = unitOfWork;
}
}
IUnitOfWork
早先已在Startup.cs
注册。它正确地被注射,但问题出在DBContext
实例中。 IUnitOfWork的实现需要DbContext
实例。它已创建,但其Model
属性抛出'_context.Model' threw an exception of type 'System.ObjectDisposedException'
。 StackTrace是:
in Microsoft.Data.Entity.DbContext.get_ServiceProvider()
in Microsoft.Data.Entity.DbContext.get_Model()
当我尝试在集线器中注入服务提供程序时,会触发相同的异常。
public ReceiptsHub(IServiceProvider provider) : base()
{
var context = provider.GetService<ApplicationDbContext>();
}
当我尝试在hub中注入DbContext时,会触发相同的异常(创建上下文的实例,但它是model属性会引发异常)。
public ReceiptsHub(ApplicationDbContext context) : base()
{
Context = context;
}
我做错了什么?或者也许有人会帮助我?并显示从SignalR中心更新数据库的另一种方法?
更新即可。我的Startup.cs
代码,我是registring context
// here configured context
services.AddEntityFramework()
.AddInMemoryDatabase()
.AddDbContext<ApplicationDbContext>(options =>
{
options.UseInMemoryDatabase();
});
//here configured store and custom manager
services.AddScoped<IAuthStore<ApplicationUser, ClientApplication>, AuthStore<ApplicationUser, ClientApplication, ApplicationDbContext>>();
services.AddScoped<AuthManager<ApplicationUser, ClientApplication>>();
services.AddScoped<IUnitOfWork<string>, UnitOfWork<string, ApplicationDbContext>>();
也许,问题出现在InMemoryDatabase中?