我正在使用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)
我遇到的问题是,在我的一些模型类中,我想注入一些我声明的依赖项.
但我认为我不能使用构造函数注入模式,因为模型类通常是明确地实现的,因此,我需要为自己提供依赖项,我不能.
所以我的问题是:是否有另一种方式比构造函数注入注入依赖项,以及如何?我是在考虑一个属性模式或类似的东西.
我们正在开发一个不同的大型ASP.NET Core MVC 1.0应用程序.我们的每个应用程序有4层,如下所示:
目前,在处理所有数据库操作的存储库中,我们对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并运行项目,它会返回正确的连接字符串,如果我们在UI中的appsettings.json文件中设置连接字符串,用户界面也将成功连接.
问题: 上面提到的堆栈是我们用于几个"Micro Apps"的东西,这意味着我们有几个连接到多个数据库的项目.我们还希望利用Development,Staging和Production连接字符串.
如果我们使用Configuration Manager连接字符串,一切都适合日常操作; 但是,当我们想要将Entity Frameworks代码用于数据库命令行时,我们需要进入我们想要更新的每个存储库,并将DbContext更改为硬编码连接字符串,执行命令,然后将它们更改回完成时,这变得非常麻烦.
问题: 我们只是做错了吗?是否有一个首选实践来设置Entity Framework Core 1.0堆栈,它允许我们不必手动更改DbContext但是充分利用配置文件?
任何方向将不胜感激!
我们在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?
在一个简单的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
对于ASP.NET Core,我可以在一个Project.json中定位多个框架(例如netcoreapp1.1和dnx451):
"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.1和dnx451在一个项目在Visual Studio 2017的最终版本?
我在用 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字符串表示
当你运行dotnet run你的MVC6应用程序时,第一次请求需要很长时间,但它显然工作正常.我试图在谷歌找到答案,但这是不可能的,因为我得到的是关于IIS的文章,我完全没有使用.实际上我在Ubuntu上运行代码.
有可能预热,dotnet run所以第一个请求会像第二个请求一样快吗?
暴露于dotnet Core.在尝试在dotnet核心应用程序中设置EntityFramework.Core的示例测试应用程序中.虽然我能够添加EntityFramework.Core NugGet包,但我找不到'添加' - >'新项' - >'数据' - >'ADO.NET实体数据模型'
EntityFramework.Core是不可能的?
EntityFramework.Core与EntityFramework 7有何不同?
目前有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)
但这对我来说似乎不正确!
任何的想法?
问题
我在Ubuntu上创建了一个ASP.NET Core Web App,运行正常.
但是,它似乎默认包括了凉亭.我希望我的Web项目能够处理为站点提供服务,但是要让Webpack与其他一些东西一起孤立地处理任何Javascript/SASS/CSS等生成.
题
如何从项目中干净地移除凉亭?