在这种情况下,我正在为特定类型创建一个AutoFixture样本构建器System.Data.DataSet.构建器将返回a FakeDataSet,这是DataSet为测试而定制的.
以下不起作用,dataSet总是返回null,即使DataSet正在请求a(我可以通过钻取request属性来判断).
public class DataSetBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var dataSet = request as DataSet;
if (dataSet == null)
{
return new NoSpecimen(request);
}
return new FakeDataSet();
}
}
Run Code Online (Sandbox Code Playgroud)
这种变化确实有效,但似乎过于复杂.感觉有更好的方法来完成同样的事情,我只是缺少一些东西.
public class DataSetBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var seededRequest = request as SeededRequest;
if (seededRequest == null)
{
return new NoSpecimen(request);
}
var requestType = seededRequest.Request …Run Code Online (Sandbox Code Playgroud) 我的登台服务器上有两个网站,都是在IIS中运行的Asp.net核心网站.我已将环境变量设置ASPNETCORE_ENVIRONMENT为Staging机器范围.这适用于其中一个站点,但另一个忽略变量并在生产模式下运行.我必须将托管环境配置到web.config文件中以在分段模式下运行它.
关于为什么一个站点不考虑环境变量的任何提示?
编辑:在我的两个Startup(IHostingEnvironment env)构造函数中,我使用环境变量:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddJsonFile("logging.json")
.AddEnvironmentVariables(); // <---
Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud) 我使用Visual Studio 2017(15.6.6).在调试时,我尝试int a = 2;在即时窗口中评估简单表达式.一个错误
C#编译器中的内部错误
被扔了.
我尝试Use Managed Compatibility Mode在这个问题中暗示,但它没有帮助.
谢谢你的帮助.
c# debugging immediate-window visual-studio-debugging visual-studio-2017
在依赖注入方面有明确的实现接口的好处吗?
据我所知,接口可以显式或隐式实现:
interface IFoo
{
void Bar();
}
//implicit implementation
class Foo1 : IFoo
{
public void Bar(){}
}
//explicit implementation
class Foo2 : IFoo
{
void IFoo.Bar(){}
}
Run Code Online (Sandbox Code Playgroud)
现在只能通过调用接口方法来调用显式实现,而可以直接在类的实例上调用隐式实现:
class Baz
{
void Ba()
{
Foo1 foo1 = new Foo1();
foo1.Bar();
Foo2 foo2 = new Foo2();
foo2.Bar(); //syntax error
IFoo foo2_explicit = new Foo2();
foo2_explicit.Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,使用显式接口实现,不能意外地在具体类上调用方法,但必须调用接口方法.这是否会阻止紧密耦合的代码,这是DI的一个目的,还是我在这里咆哮错误的树?毕竟,不能意外地编写一个构造函数或方法来获取注入的具体类而不是接口:
class Baz
{
void Ba(Foo2 foo)
{
foo.Bar(); //syntax error
}
void Bb(IFoo foo)
{
foo.Bar();
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用Apache Tomcat JDBC连接池.我很困惑因为在重载下我一直看到以下错误:
12:26:36,410 ERROR [] (http-/XX.XXX.XXX.X:XXXXX-X) org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-/XX.XXX.XXX.X:XXXXX-X] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:4; busy:4; idle:0; lastwait:10000].
12:26:36,411 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/APP].[AppConf]] (http-/XX.XXX.XXX.X:XXXXX-X) JBWEB000236: Servlet.service() for servlet AppConf threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
我的期望是,对于池,对新连接的请求将保留在队列中,直到连接可用.相反,当池达到容量时,似乎拒绝了请求.这种行为可以改变吗?
谢谢,
达尔
这是我的池配置:
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:oracle:thin:@" + server + ":" + port + ":" + SID_SVC);
p.setDriverClassName("oracle.jdbc.driver.OracleDriver");
p.setUsername(username);
p.setPassword(password);
p.setMaxActive(4);
p.setInitialSize(1);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(300);
p.setMinEvictableIdleTimeMillis(150000);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1 from dual");
p.setMinIdle(1);
p.setMaxIdle(2);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;"
+ "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer");
Run Code Online (Sandbox Code Playgroud) 根据文档:
该
@addTagHelper指令使标签助手可用于视图。本例中,视图文件为Views/_ViewImports.cshtml,默认为Views文件夹及子目录下的所有视图文件继承;使标签助手可用。
所以我导入了标签助手Views\_ViewImports.cshtml:
@using MyProject
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Run Code Online (Sandbox Code Playgroud)
它们可以很好地处理文件Views夹内的文件。
但是,在文件中Views/Home/Index.cshtml,我不支持标签助手,它们也没有正确呈现为链接。当我将其复制_ViewImports.cshtml到文件夹中时Views/Home,一切都按预期进行。
那么我错过了什么?
更新
那么我错过了什么?我_ViewImports.cshtml被放在文件夹中Views/Shared(d'oh)。将其移至 后Views,TagHelper 在任何地方都按预期工作。
正如这里所指出的,在 URL 中使用双斜杠是有效的。
我有一个使用属性路由的 ASP Net Core 项目,一个GroupController用于处理Groups上的操作的控制器和一个用于PUTtingRulePart的组的操作,由其ImportId类型指定string。
[Route("/api/[controller]")]
public class GroupController : ControllerBase
{
[HttpPut("{groupImportId?}/ruleParts")]
public async Task<IActionResult> PutRuleParts(string groupImportId, [FromBody]List<RulePartDto> ruleParts)
{
return null; //actual code ommitted for brevity
}
}
Run Code Online (Sandbox Code Playgroud)
像http://localhost/api/group/groupImportId/ruleParts预期的那样匹配的 URL 。
我希望 null groupImportIds,即 URLs likehttp://localhost/api/group//ruleParts会调用相同的操作,因为groupImportId路由参数已被标记为可选。但是,在尝试调用此 URL 时,出现 404 错误并且未命中该操作。
是否有可能匹配 ASP Net Core 中的空 URL 路径段?
c# attributerouting asp.net-core asp.net-core-webapi asp.net-core-routing
在 Visual Studio 15.8.7 中调试 C# 项目时,我想在立即窗口中使用类似Single()或 的Linq 方法,如下所示:FirstOrDefault()
allGroups.Single(ag => ag.ImportId == importId)
Run Code Online (Sandbox Code Playgroud)
但是,我有时会收到一条错误消息告诉我
方法 System.Linq.Enumerable.FirstOrDefault() 的评估调用本机方法 System.Environment.FailFast()。不支持在此上下文中评估本机方法。
我不能总是重现此错误,因为importId它的某些值向我显示了我感兴趣的组,对于其他一些值,它会引发错误。
Use managed compatibility mode我已在调试器选项中启用。我还缺少什么?
使用下面的单元测试..我试图测试我的webapi.
[Test]
public void CheckControllerForCreate()
{
var config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/product");
var route = config.Routes.MapHttpRoute("Foo", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });
var controller = new ProductController
{
ControllerContext = new HttpControllerContext(config, routeData, request),
Request = request,
Url = new UrlHelper(request)
};
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
var result = controller.Create(new Product {Id = 4, Name = "Tomato Soup", Category = "Groceries", Price = 1});
} …Run Code Online (Sandbox Code Playgroud) 刚刚开始我的 F# 之旅,是否可以定义一种类型,该类型仅限于一组特定的字符串值?例如 它只能表示值"Foo","Bar"并且"Baz",尝试为其分配任何其他值将引发错误,甚至在编译时失败。
更新:到目前为止,我想过创建一个字符串类型并使用创建函数:
type Constrained = string
let createConstrained (constrained : Constrained) =
match constrained with
| "foo" -> constrained
| "bar" -> constrained
| "baz" -> constrained
| _ -> failwith "Can be only foo, bar or baz"
Run Code Online (Sandbox Code Playgroud)
接下来,我考虑使用 DU 和某种基于选项返回字符串的函数(这是它的正确名称吗?):
type Constrained = FOO | BAR | BAZ
let constrainedString constrained =
match constrained with
| FOO -> "foo"
| BAR -> "bar"
| BAZ -> "baz"
| _ -> …Run Code Online (Sandbox Code Playgroud) 我想对一个针对整个.net框架的asp.net核心项目进行单元测试。我尝试使用此博客文章中概述的“常规”单元测试项目模板和.net核心项目,但是两次尝试均失败,因为在两个测试项目中都无法引用我的Web项目的程序集。
有没有办法在完整框架上对asp.net核心应用程序进行单元测试?
我有一个MVC控制器,我无法正常工作.
在页面上,我有一个表单,其中包含以该形式存在的操作链接:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table>
<tr>
<th>
@Html.ActionLink("Neues Gastkonto anlegen", "Index", "NewGuest", null, new { @class="button"})
</th>
</tr>
...
</table>
}
Run Code Online (Sandbox Code Playgroud)
该链接正确呈现为<host>/GluexDB/NewGuest.请注意,我正在GluexDB区域工作,我的路线设置正确.
NewGuestController如下:
public class NewGuestController : Controller
{
IGluexDBServiceFactory serviceFactory;
//used for injecting the database
public NewGuestController(IGluexDBServiceFactory serviceFactory)
{
if (serviceFactory == null)
{
throw new Exception("Please provide a valid serviceFactory");
}
this.serviceFactory = serviceFactory;
}
public ActionResult Index()
{
throw new NotImplementedException("CnG Cont"); //<-- no exception thrown here
return View("CreateNewGuest");
}
Run Code Online (Sandbox Code Playgroud)
但是,单击第一页中的链接不会抛出异常但告诉我The view …
c# ×8
asp.net-core ×3
asp.net ×2
razor ×2
.net ×1
apache ×1
asp.net-mvc ×1
autofixture ×1
debugging ×1
f# ×1
jdbc ×1
linq ×1
pooling ×1
tag-helpers ×1
tomcat ×1
types ×1
unit-testing ×1
url-helper ×1