加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

entity-framework – 有没有办法让ASP.NET 5依赖注入解析没有引

发布时间:2020-12-16 07:11:04 所属栏目:asp.Net 来源:网络整理
导读:我正在使用MVC 6进行一些原型设计并遇到了困境.我们的项目架构非常简单: 数据层(实体框架6) 服务层(类库,参考数据层) 表示层(MVC 4,引用服务层,不引用数据层) 即使在阅读(并同意)Composition Root pattern之后,我也试图使设计尽可能与原始设计相似.这意味着
我正在使用MVC 6进行一些原型设计并遇到了困境.我们的项目架构非常简单:

数据层(实体框架6)
服务层(类库,参考数据层)
表示层(MVC 4,引用服务层,不引用数据层)

即使在阅读(并同意)Composition Root pattern之后,我也试图使设计尽可能与原始设计相似.这意味着我的新MVC 6应用程序不知道我的DbContext类型.您可以猜测当我尝试将一个服务类注入控制器时会发生什么:

尝试激活My.Service.Tier.SomeService时,无法解析My.Data.Tier.DbContext类型的服务.

我相信我们之前的实现(我没有写它)通过反映bin文件夹中的程序集来解析DbContext.有没有一种方法可以使用内置于ASP.NET 5 / MVC 6的新的Microsoft.Extensions.DependencyInjection命名空间来完成此操作(或类似的操作),这样我就可以避免从我的表示层对我的数据层进行硬引用?

更新
阅读Joe Audette的回答后,我想出了一个非常简单的扩展方法,我将其添加到服务层:

public static class ServiceCollectionExtensions
{
    public static void RegisterDbContext(this IServiceCollection services)
    {
        services.AddScoped<My.Data.Tier.DbContext,My.Data.Tier.DbContext>();
    }
}

然后,在我的MVC应用程序的Startup.cs中:

using My.Service.Tier.ExtensionNamespace;

public void ConfigureServices(IServiceCollection services)
{
    services.RegisterDbContext();
}

解决方法

我认为在内置DI中,您需要的所有内容都必须在DI服务中注册.

要将数据引用保留在MVC应用程序之外,您可以在服务层中使用IServiceCollection扩展方法来注册dbcontext,或者它可以在数据层上调用扩展方法.

这样你的mvc应用程序只需要在服务层上有一个引用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读