当前位置: 首页 > 编程语言 > C#

如何使用SimpleInjector、Repository和Context–CodeFirst分享

时间:2023-04-10 18:49:14 C#

如何使用SimpleInjector、Repository和Context–CodeFirst业务逻辑层(我也想使用PerWebRequest方法)。在DAL层中,我有:publicinterfaceIRepositorywhereT:class{voidAdd(Tentity);voidDelete(T实体);无效删除(intid);无效更新(T实体);TGetById(intId);IQueryableAll();IEnumerable查找(Func谓词);}和:publicclassEFRepository:IRepository,IDisposablewhereT:class{#regionMembersprotectedDbContextContext{get;放;}protectedDbSetDbSet{get;放;}#endregion#区域构造函数publicEFRepository(DbContextdbContext){if(dbContext==null)thrownewArgumentNullException("dbContext");上下文=数据库上下文;DbSet=Context.Set();}和我的上下文:publicclassPASContext:DbContext,IDbContext{publicDbSetProducts{get;放;}公共DbSet用户{得到;放;}publicPASContext():base("PostAndSell"){}}如您所见,EFRepository只有一个带有一个参数的构造函数-这是因为我想使用SimpleInjector创建上下文实例并将其传递给创建时的存储库。在BLL中,我有一个ProductBLL类,我想从数据库中获取该类中的所有产品(使用某种GetAll方法)并传递给它,比方说HomeController。我真的需要有人跟我说话。我首先从nuger安装了正确的包(SimpleInjector和SimpleInjectorASP.NETIntegration)也在我的global.asax.cs文件中,在我添加的Application_Start()函数下:varcontainer=newSimpleInjector.Container();container.RegisterPerWebRequest();但是我在哪里创建Context实例呢?以及如何在业务层访问它?由于您可能有许多IRepository实现(针对产品、客户、员工等),因此最好为IRepository进行单个开放式通用注册,如下所示:container.Register(typeof(IRepository),typeof(EFRepository),Lifestyle。范围);作用域生活方式定义为:container.Options.DefaultScopedLifestyle=newWebRequestLifestyle();此注册确保每次请求IRepository时SimpleInjector都会返回一个EFRepository,它为IRepository提供一个EFRepository,依此类推。由于您希望在同一请求中的所有存储库上使用相同的DbContext实例,您应该还使用作用域生活方式注册DbContext:container.Register(Lifestyle.Scoped);在BLL中,我有一个ProductBLL类,我想从中检索它获取数据库中的所有产品并将其传递给HomeController在这种情况下,ProductBLL对我来说似乎是一个无用的抽象。如果HomeController只是传递数据,您可以轻松地直接依赖IRepository。以上就是C#学习教程:如何使用简单的injector、repositories和contexts-先码分享的所有内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注-这篇文章来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢