Entity framework core 如何从IRouter访问存储库

Entity framework core 如何从IRouter访问存储库,entity-framework-core,aspnetboilerplate,Entity Framework Core,Aspnetboilerplate,我正在开发模块化应用程序,我希望来自不同模块的实体能够注册自己的友好url段塞 app.UseMvc(routes => { routes.Routes.Add(new SlugRouter(routes.DefaultHandler)); (...) }); 但是下面的代码抛出无法访问已处理的对象。对象名称:“CommerceDbContext”。尝试从存储库访问slug时 public class SlugRouter : IRouter { private

我正在开发模块化应用程序,我希望来自不同模块的实体能够注册自己的友好url段塞

app.UseMvc(routes =>
{
    routes.Routes.Add(new SlugRouter(routes.DefaultHandler));
    (...)
});
但是下面的代码抛出无法访问已处理的对象。对象名称:“CommerceDbContext”。尝试从存储库访问slug时

public class SlugRouter : IRouter
{
    private readonly IRouter _target;

    public SlugRouter(IRouter target)
    {
        _target = target;
    }

    public async Task RouteAsync(RouteContext context)
    {
        var slugRepository = context.HttpContext.RequestServices.GetService<IRepository<SlugEntity>>();

        // ERROR: Cannot access a disposed object. Object name: 'CommerceDbContext'
        var urlSlug = await slugRepository.GetAllIncluding(x => x.EntityType).FirstOrDefaultAsync(x => x.Slug == context.HttpContext.Request.Path.Value);
        (...)
    }       
公共类路由器:IRouter
{
专用只读IRouter\u目标;
公用路由器(IRouter目标)
{
_目标=目标;
}
公共异步任务RouteAsync(RouteContext上下文)
{
var slugRepository=context.HttpContext.RequestServices.GetService();
//错误:无法访问已释放的对象。对象名称:“CommerceDbContext”
var urlslaug=await slugRepository.GetAllIncluding(x=>x.EntityType).FirstOrDefaultAsync(x=>x.Slug==context.HttpContext.Request.Path.Value);
(...)
}       
要从路由器访问存储库,我必须缺少一些简单的东西。谢谢您的帮助。

开始:

公共异步任务RouteAsync(RouteContext上下文)
{
var slugRepository=context.HttpContext.RequestServices.GetService();
var unitOfWorkManager=context.HttpContext.RequestServices.GetService();
使用(var uow=unitOfWorkManager.Begin())
{
var urlslaug=await slugRepository.GetAllIncluding(x=>x.EntityType).FirstOrDefaultAsync(x=>x.Slug==context.HttpContext.Request.Path.Value);
等待uow.CompleteAsync();
}
}

访问IModel。不需要数据库上下文

使不同模块的实体能够注册自己的 友好url段塞

我是这样做的:

1) 将模型创建移到静态方法

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        BuildModel(modelBuilder);
    }

    public static void BuildModel(ModelBuilder modelBuilder)
    {
        // ...
    }
2) 在需要的地方创建模型:

        var conventionSet = new ConventionSet();
        var modelBuilder = new ModelBuilder(conventionSet);
        AdminkaDbContext.BuildModel(modelBuilder);
        var mutableModel = modelBuilder.Model; 
这是您的元(在mutableModel中)。您可以循环实体(实体类型)