我试图找出如何使用XUnit的依赖注入.我的目标是能够将我的ProductRepository注入我的测试类.
这是我正在尝试的代码:
public class DatabaseFixture : IDisposable
{
private readonly TestServer _server;
public DatabaseFixture()
{
_server = new TestServer(TestServer.CreateBuilder().UseStartup<Startup>());
}
public void Dispose()
{
// ... clean up test data from the database ...
}
}
public class MyTests : IClassFixture<DatabaseFixture>
{
DatabaseFixture _fixture;
public ICustomerRepository _repository { get; set; }
public MyTests(DatabaseFixture fixture, ICustomerRepository repository)
{
_fixture = fixture;
_repository = repository;
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误: 以下构造函数参数没有匹配的fixture数据(ICustomerRepository存储库)
这让我相信XUnit不支持依赖注入,只有它是一个Fixture.
有人能给我一种使用XUnit在我的测试类中获取ProductRepository实例的方法吗?我相信我正确启动了测试服务器,因此Startup.cs运行并配置DI.
我有一个ASP.NET Core 1.0(以前称为ASP.NET 5)解决方案,包含几个类库(包)和一个ASP.NET MVC6项目.
我有一个测试库使用支持Core 1.0的新XUnit 2.0.
但是,出于某种原因,我的代码覆盖率在我正在通过的所有测试中运行时产生零结果.
默认情况下,ASP.NET Core 1.0项目由运行时内置在内存中,并且没有任何工件持久保存到磁盘.因此,在设置中,我为解决方案中的每个项目启用了"在构建时生成所有输出".现在,当我构建时,我看到pdb和dll文件正在输出到artifacts文件夹.我认为确保代码覆盖率可以在此之后工作,但仍然没有结果.
也许代码覆盖只是简单地不适用于新的.NET Core 1.0.如果有人对此有一些信息会很棒.
我创建了一个空的核心1.0 Web应用程序,并添加了一个package.json文件,从此URL复制angular2快速启动package.json行.
我不断收到消息Dependencies - 未安装和npm - 未安装.
有谁知道为什么会这样?我是否必须在我的PC上实际安装node.js才能使Visual Studio能够使用它?鲍尔工作完美......
visual-studio node.js angularjs visual-studio-2015 asp.net-core-1.0
当我创建一个新的ASP.NET Core 1.0应用程序时,我想使用npm而不是bower.所以我删除bower.json并另外删除wwwroot/lib文件夹中预先安装的所有内容.
我将package.json文件添加到我的解决方案中,其中包含以下dev依赖项:
"devDependencies": {
"bootstrap": "3.3.7",
"jquery": "3.1.0",
"jquery-validation": "1.15.1",
"jquery-validation-unobtrusive": "3.2.6"
}
Run Code Online (Sandbox Code Playgroud)
但是,NPM会将所有库下载到项目根目录中的node_modules文件夹中.
我相信这就是Gulp的用武之地.有人可以告诉我如何使用gulp将分发文件从node_modules发送到我的wwwroot目录.如果有任何我无法找到的教程,请链接.
让我们暂时离开ASP.NET身份,让我们假设我们正在为我们的应用程序构建自定义身份验证/授权系统.
它将包含以下表格以获得完全的灵活性:
用户
角色
权限
UserRoles
RolePermissions
通过上述内容,我们可以拥有应用程序的完整用户管理部分,其中管理员可以说用户A具有角色B,其具有权限C,D,F.
上面的内容在过去一直对我有用,但现在可以使用ASP.NET Identity切换到ASP.NET Core MVC应用程序.
尝试利用Microsoft在UserManager中为您提供ASP.NET核心身份的一切我希望能够仍然实现上述目标,但是ASP.NET核心身份MVC方式.
我所知道的:
我可以轻松使用UserManager为用户和角色以及用户角色实现CRUD页面.
我想弄清楚:
我怎样才能复制"角色拥有哪些权限/操作?"的相同行为.概念.
我最初的猜测是你会将Claim与Roles结合使用.声明被分配给角色,即RoleClaims,然后角色被分配给用户.
通过这种方式,我可以使用Authorize标签检查控制器/操作方法之上的角色.另外在页面级别更进一步说如果用户的角色没有声明隐藏/显示删除按钮声明"DeleteProduct"有点像这个基于视图的授权文档所说的那样.
-
我试图弄清楚我是否正在使用这些东西走上正确的道路.任何建议或更正都会有所帮助.
c# asp.net asp.net-identity asp.net-core asp.net-core-identity
我的每个 XUnit 测试项目都有一个 appsettings.json 文件,该文件指定了一些设置。我一直使用 IConfiguration 的依赖注入来检索我的 Test Fixture 类中的这些设置。现在想起来,我完全不知道 IConfiguration 过去是如何解决的,因为 XUnit 项目中没有 Startup.cs 和 ConfigureServices 方法。但我发誓它有效。
以下内容曾经有效,但现在不起作用:
夹具:
public class TestFixture : IDisposable
{
public IConfiguration Configuration { get; set; }
public TestFixture(IConfiguration configuration)
{
Configuration = configuration;
}
}
Run Code Online (Sandbox Code Playgroud)
测试类:
public class TestCases : IClassFixture<TestFixture>
{
public TestCases(TestFixture fixture)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误如下:
消息:System.AggregateException:发生一个或多个错误。---- 类装置类型“MyProj.Tests.TestFixture”具有一个或多个未解析的构造函数参数:IConfiguration 配置 ---- 以下构造函数参数没有匹配的装置数据:TestFixture 装置
我正在按照Microsoft 架构指南创建 ASP.NET Core Web 应用程序。
该指南实现了非常简单的简洁架构模式。
如果您查看使用干净架构模式的示例项目,您将看到有一个包含 ApplicationUser.cs 类的Infrastructure/Identity文件夹。
我的问题:
我正在使用实体框架,ApplicationCore 类库中的一个业务实体需要包含一个 ApplicationUser 列表。ApplicationCore 库不应引用任何其他项目。它包含所有接口和业务实体。如何在我的基础设施/身份项目中保留 ApplicationUser 类,并且在不违反规则的情况下仍然在 ApplicationCore 项目中的业务实体之一中使用它。
我知道一种解决方案是不在我的基础设施项目中存储 ApplicationUser 实体。但是,我觉得它应该在那里,因为它在实现 IdentityUser 时将始终依赖于 Identity。
c# entity-framework-core asp.net-core-mvc asp.net-core clean-architecture
我有一个场景,我需要调用我的Web API Delete方法,如下所示:
// DELETE: api/products/{id}/headers
[HttpDelete("{id}/headers")]
public void DeleteProductHeaders(int id, [FromBody] string query)
{
}
Run Code Online (Sandbox Code Playgroud)
诀窍是,为了获得查询,我需要通过正文发送它,而DeleteAsync没有像post那样的json参数.有谁知道如何使用c#中的System.Net.Http客户端来做到这一点?
// Delete a product's headers
public void DeleteProductHeaders(int id, string query)
{
using (var client = GetClient())
{
HttpResponseMessage response;
try
{
// HTTP DELETE
response = client.DeleteAsync($"api/products/{id}/headers").Result;
}
catch (Exception ex)
{
throw new Exception("Unable to connect to the server", ex);
}
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud) 我知道WEB API和MVC之间的区别.我也知道在asp.net core 1.0中只有一种类型的控制器可以同时处理MVC和API.
但是,我最近一直在观看很多ASP.NET MVC教程,并注意到教师在Controllers文件夹中创建了一个Api文件夹.
这样他就分出了主要处理ViewModel的所有MVC控制器,并使用View函数告诉MVC哪个视图要从主要处理Dtos的API控制器中显示,并且似乎严格处理数据,而不是视图.
您会认为在MVC应用程序中不会有API控制器吗?特别是因为在核心1.0中你继承了一个类:'Controller'.但是我想当你整合像Angular和Kendo UI这样的前端框架来制作很多ajax请求时,你通常希望通过api来完成它们.
这是我目前的理解:
严格使用MVC控制器仅用于MVC,例如指定应显示哪个视图以及传递视图模型.
使用API控制器主要用于ajax调用,从不用于视图初始加载,从不用于MVC CRUD模式.
在谈到这一点时,有人能给我一个更好的标准吗?
我有一个具有以下属性的Customer类:
public int Id { get; set; }
public string Name { get; set; }
public int AddressId { get; set; }
public Address Address { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的目标是编写一个Dapper查询,该查询将使用内部联接在返回的每个Customer中填充整个Address属性。
这是我所拥有的并且正在运行,但是我想知道这是否是最干净/最简单的方法:
StringBuilder sql = new StringBuilder();
using (var conn = GetOpenConnection())
{
sql.AppendLine("SELECT c.Id, c.Name, c.AddressId, a.Address1, a.Address2, a.City, a.State, a.ZipCode ");
sql.AppendLine("FROM Customer c ");
sql.AppendLine("INNER JOIN Address a ON c.AddressId = a.Id ");
return conn.Query<Customer, Address, Customer>(
sql.ToString(),
(customer, address) => {
customer.Address= address;
return userRole;
},
splitOn: …Run Code Online (Sandbox Code Playgroud)