小编Tse*_*eng的帖子

模型类(实体)中的依赖注入

我正在使用Entity Framework Code-First构建ASP.NET Core MVC应用程序.我选择实现一个简单的存储库模式,为我创建的所有模型类提供基本的CRUD操作.我选择遵循http://docs.asp.net中提供的所有建议,DI就是其中之一.

在.NET 5中,依赖注入非常适用于我们不直接实例化的任何类(例如:控制器,数据存储库,......).

我们只是通过构造函数注入它们,并在应用程序的Startup类中注册映射:

// Some repository class
public class MyRepository : IMyRepository
{
    private readonly IMyDependency _myDependency;
    public MyRepository(IMyDependency myDependency)
    {
        _myDependency = myDependency;
    }
}

// In startup.cs :
services.AddScoped<IMyDependency, MyDependency>();
services.AddScoped<IMyRepository, MyRepository>();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在我的一些模型类中,我想注入一些我声明的依赖项.

但我认为我不能使用构造函数注入模式,因为模型类通常是明确地实现的,因此,我需要为自己提供依赖项,我不能.

所以我的问题是:是否有另一种方式比构造函数注入注入依赖项,以及如何?我是在考虑一个属性模式或类似的东西.

c# dependency-injection asp.net-core

14
推荐指数
3
解决办法
8704
查看次数

实体框架核心1.0连接字符串

我们正在开发一个不同的大型ASP.NET Core MVC 1.0应用程序.我们的每个应用程序有4层,如下所示:

  1. DTO
  2. 存储库(实体框架 - 代码优先)
  3. 服务(业务逻辑)
  4. MVC(UI-MVC)

目前,在处理所有数据库操作的存储库中,我们对DbContext中的数据库连接字符串进行了硬编码,如下所示:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {

    optionsBuilder.UseSqlServer("Data Source=somedatabase.database.windows.net;Initial Catalog=database;Integrated Security=False;User ID=username;Password=password;Connect Timeout=60;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=true");

}
Run Code Online (Sandbox Code Playgroud)

该项目作为独立的ASP.NET Core 1.0项目位于MVC项目之外.它还有一个空的Program.cs文件,它似乎是执行代码到数据库命令行所必需的(dotnet ef migrations add和dotnet ef database update).

我们在DbConext中有一个硬编码连接字符串的原因是因为当我们使用下面的代码时,在执行dotnet ef命令时,我们得到一个对象引用未设置为对象异常的实例.

  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {

    optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["StandardDatabase"].ConnectionString);

  }
Run Code Online (Sandbox Code Playgroud)

但是,由于我们有一个Program.cs,如果我们为连接字符串添加Debug.WriteLine并运行项目,它会返回正确的连接字符串,如果我们在U​​I中的appsettings.json文件中设置连接字符串,用户界面也将成功连接.

问题: 上面提到的堆栈是我们用于几个"Micro Apps"的东西,这意味着我们有几个连接到多个数据库的项目.我们还希望利用Development,Staging和Production连接字符串.

如果我们使用Configuration Manager连接字符串,一切都适合日常操作; 但是,当我们想要将Entity Frameworks代码用于数据库命令行时,我们需要进入我们想要更新的每个存储库,并将DbContext更改为硬编码连接字符串,执行命令,然后将它们更改回完成时,这变得非常麻烦.

问题: 我们只是做错了吗?是否有一个首选实践来设置Entity Framework Core 1.0堆栈,它允许我们不必手动更改DbContext但是充分利用配置文件?

任何方向将不胜感激!

c# entity-framework-core asp.net-core

12
推荐指数
2
解决办法
2万
查看次数

如何使用Serilog和AutoFac在控制台应用程序中获取Microsoft.Extensions.Logging <T>?

我们在ASP.NET Core应用程序中有共同的BL类,它们位于ctor中:

Microsoft.Extensions.Logging.ILogger<Foo>

在ASP.NET Core中,ASP.NET的内部基础结构处理通过ILogger获取ILogger LoggerFactory.

我们现在想在控制台应用程序中重用这些BL类(用于异步作业),我们如何设置AutoFac和Serilog以注入不存在的Microsoft.Extensions.Logging.ILogger<T>环境LoggerFactory

c# dependency-injection autofac serilog asp.net-core

12
推荐指数
1
解决办法
1万
查看次数

VS 2017总是在IIS Express配置文件上调试MVC Core网站

在一个简单的vanilla,支持ASP.NET Core MVC Web应用程序,DbContext在DI容器中注册,每当我在30-60秒后按F5,我收到错误消息:

无法启动程序' http:// localhost:60175 / '.操作超时.

索引视图中的主页,其操作从本地主机SQL Server数据库获取所有员工.该项目已经构建,因此调试的初始构建非常快,而且可疑是延迟的原因.

如果我在没有调试的情况下运行,我会在30到40秒内完成主页.

什么是超时,我可以设置超时吗?或者还有什么我可以加速这个痛苦的慢调试设置,与MVC 5相比,主页只在几秒后打开.

visual-studio asp.net-core-mvc asp.net-core visual-studio-2017

12
推荐指数
1
解决办法
2366
查看次数

如何在VS2017最终定位多个框架?

对于ASP.NET Core,我可以在一个Project.json中定位多个框架(例如netcoreapp1.1dnx451):

"frameworks": {
   "netcoreapp1.1": {
     "dependencies": {
       "Microsoft.NETCore.App": {
         "version": "1.1.0",
         "type": "platform"
       }
     },
     "imports": [
       "dotnet5.6",
       "portable-net45+win8"
     ]
   },
   "dnx451": {}
 },
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2017的最终版本中,我只能定位netcoreapp1.1或者dnx451,但我认为无法同时定位两者.

我尝试直接编辑csproj文件以通过设置<TargetFramework>netcoreapp1.1;dnx451</TargetFramework>或者甚至 <TargetFrameworks>netcoreapp1.1;dnx451</TargetFrameworks>在Visual Studio中添加第二个框架而由于不支持的框架而导致错误.

那么,如何同时针对netcoreapp1.1dnx451在一个项目在Visual Studio 2017的最终版本?

asp.net-core visual-studio-2017

12
推荐指数
1
解决办法
7076
查看次数

如何在控制器内获取@ Url.Action值

我在用 ASP.net core

我可以在视图中使用Html操作

@Url.Action("GetOptions", "ControllerName", new { id="1"});
Run Code Online (Sandbox Code Playgroud)

但是我想在Controller中获取它的字符串值.

例如

string Url= Url.Action("GetOptions", "ControllerName", new { id="1"}).ToString();
Run Code Online (Sandbox Code Playgroud)

在以前版本的MVC中,您可以在控制器中引用辅助程序

  UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是在我的控制器中生成一个URL字符串表示

asp.net-core-mvc asp.net-core

11
推荐指数
1
解决办法
1万
查看次数

是否可以预热应用程序?

当你运行dotnet run你的MVC6应用程序时,第一次请求需要很长时间,但它显然工作正常.我试图在谷歌找到答案,但这是不可能的,因为我得到的是关于IIS的文章,我完全没有使用.实际上我在Ubuntu上运行代码.

有可能预热,dotnet run所以第一个请求会像第二个请求一样快吗?

.net .net-core asp.net-core

11
推荐指数
1
解决办法
491
查看次数

EDMX在哪里?

暴露于dotnet Core.在尝试在dotnet核心应用程序中设置EntityFramework.Core的示例测试应用程序中.虽然我能够添加EntityFramework.Core NugGet包,但我找不到'添加' - >'新项' - >'数据' - >'ADO.NET实体数据模型'

EntityFramework.Core是不可能的?

EntityFramework.Core与EntityFramework 7有何不同?

.net entity-framework-core .net-core

11
推荐指数
2
解决办法
8231
查看次数

使用带有EF Core的UserManager进行预先加载

目前有ApplicationUser类具有一些自定义属性,如:

public class ApplicationUser : IdentityUser
{
    public string Name { get; set; }
    public List<Content> Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想让当前登录的用户获得相关数据列表(Content属性).

在我的控制器中,如果我把:

Applicationuser user = await _userManager.GetUserAsync(HttpContext.User);
Run Code Online (Sandbox Code Playgroud)

我得到了登录用户,但没有任何相关数据.但是,如果我使用ApplicationDbContext下面的检索当前用户,我可以检索相关数据:

ApplicationUser user = await _userManager.GetUserAsync(HttpContext.User);
ApplicationUser userWithContent = _context.Users.Include(c => c.Content).Where(u => u.Id == user.Id).ToList();
Run Code Online (Sandbox Code Playgroud)

但这对我来说似乎不正确!

任何的想法?

c# entity-framework-core asp.net-core

11
推荐指数
1
解决办法
1077
查看次数

如何从ASP.NET Core Web应用程序中删除Bower?

问题

我在Ubuntu上创建了一个ASP.NET Core Web App,运行正常.

项目清单

但是,它似乎默认包括了凉亭.我希望我的Web项目能够处理为站点提供服务,但是要让Webpack与其他一些东西一起孤立地处理任何Javascript/SASS/CSS等生成.

捆绑配置在此输入图像描述

如何从项目中干净地移除凉亭?

bower asp.net-core-mvc asp.net-core

11
推荐指数
1
解决办法
2711
查看次数