AspNet Core.EntityFramework 7.0和SignalR 3.0.0 rc1。注射

时间:2016-04-21 07:08:03

标签: asp.net entity-framework dependency-injection signalr asp.net-core

我正在尝试使用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中?

0 个答案:

没有答案