我需要与Ninject绑定到数据库,并在同一时间将它们注入同一存储库

本文关键字:同一时间 注入 存储 Ninject 绑定 数据库 | 更新日期: 2023-09-27 18:16:16

下面是我的部分代码类NinjectWebCommon的地方,我需要绑定数据上下文。它只是代码的一部分,而不是完整的类。

private static void RegisterServices(IKernel kernel)
        {
            kernel.BindSharpRepository();
            RepositoryDependencyResolver.SetDependencyResolver(new NinjectDependencyResolver(kernel));
            kernel.Bind<DbContext>().To<EntitiesDbOne>().InRequestScope();
        //kernel.Bind<DbContext>().To<EntitiesDbTwo>().InRequestScope();
    }  

类别存储库类,我需要在同一时间有两个数据库

public class CategoryRepository : ConfigurationBasedRepository<CategoryData, int>, ICategoryRepository
    {
    private readonly EntitiesDbOne _ctxOne;
        private readonly EntitiesDbTwo _ctxTwo;
    public CategoryRepository(EntitiesDbOne ctxOne, EntitiesDbTwo ctxTwo)
        {
            _ctxOne= ctxOne;
            _ctxTwo= ctxTwo;
        }
    public CategoryData GetById(int Id)
        {
             //dummy data, just for usage two different dcContexts
             var category = _ctxOne.Categories.Include((string) (x => x.MetaTags)).FirstOrDefault(x => x.Id == Id);
             var categoryName = _ctxTwo.category.FirstOrDefault(x => x.Id == category.Id);
            return category;
        }

在我的项目中,我使用SharpRepository(ConfigurationBasedRepository),我使用UnitOfWork。我想我可以跳过UnitOfWork,因为EntityFramework正在做所有这些(UnitOfWork模式)的工作。数据库的展台是EntityFramework一个是CodeFirst另一个(DbTwo) modelFirst

public class EntitiesDbOne : DbContext
    {
        public DbSet<CategoryData> Categories { get; set; }
}
public partial class EntitiesDbTwo: DbContext
    {
        public EntitiesDbTwo()
            : base("name=EntitiesDbTwo")
        {
        }
        public DbSet<attributenames> attributenames { get; set; }
        public DbSet<category> category { get; set; }
}

请给我一些链接的例子,我可以使用,我不认为我可以管理这个简单的解释。在我写这个问题之前,我在网上搜索过答案n层应用程序中的多个DbContexts

EF和存储库模式-最终在一个控制器中有多个dbcontext -有任何问题(性能,数据完整性)吗?

这个问题的名字在我的情况下是完整的,但对我来说,代码是完全不同的。使用Repository, UnitOfWork和Ninject的多个dbcontexts

这是多个数据库,但每个请求使用一个,我需要两个数据库在同一请求。http://blog.staticvoid.co.nz/2012/1/9/multiple_repository_data_contexts_with_my_repository_pattern工地和其他地方。

我读了大约20条建议,其中有两条与我的情况接近,但可能还不够。

我需要与Ninject绑定到数据库,并在同一时间将它们注入同一存储库

作为讨论的基础:

如果你使用:

kernel.Bind<EntitiesDbOne>().ToSelf().InRequestScope();
kernel.Bind<EntitiesDbTwo>().ToSelf().InRequestScope();

,像

一样使用
public class CategoryRepository : ConfigurationBasedRepository<CategoryData, int>,    ICategoryRepository
{
    public CategoryRepository(EntitiesDbOne ctxOne, EntitiesDbTwo ctxTwo)
    {
    }
}

那有什么问题吗?