也许我表现出我对依赖注入和测试缺乏了解,但我不明白如何使用依赖注入与不实现接口的类有助于我进行测试?
例如,在Enterprise Library 5.0文档中,它讨论了使用Unity容器创建实例.它说这有助于"可测试性:在使用依赖注入样式时,将类与依赖关系隔离起来是微不足道的." MSDN
如何在我的单元测试装置中使用它?他们的示例有一个构造函数,其参数为类而不是接口:
public class TaxCalculator
{
private ExceptionManager _exceptionManager;
private LogWriter _logWriter;
public TaxCalculator(ExceptionManager em, LogWriter lw)
{
this._exceptionManager = em;
this._logWriter = lw;
}
}
Run Code Online (Sandbox Code Playgroud) 当使用JQuery的$ .Ajax(..)将包含标记的JSON对象发布到MVC操作方法时,我惊讶地发现ASP.Net的请求验证不会拒绝该内容.
有没有理由将请求验证应用于JSON帖子?
使用以下定义,服务器不会拒绝标记...
$.ajax({
url: '/Controller/Action',
data: JSON.stringify({data:data}),
type: "POST",
dataType: "json",
contentType: "application/json",
});
Run Code Online (Sandbox Code Playgroud)
好像它与JSON类型的帖子有关
我正在使用.Net 4.0 MVC 3.0
我正在创建将注释保存到数据库的功能.看起来像标记/脚本可以使其通过请求验证的安全问题...
我张贴的各种特性(例如commentText)出于某种原因,它不拒绝我的帖子JSON对象,如果它包含标记像<div></div>等
在这里找到一篇似乎解释行为的文章:
至少在一个应用程序中,我需要在关系数据库中保留旧版本的记录。当应该更新某些内容时,将添加一个新副本,并将旧行标记为非当前行。当应删除某些内容时,应将其标记为非当前或已删除。
有一个简单的用例:记录的新版本只能在当前时间添加,每个版本取代一行。这可用于在保存新数据时存档以前的记录。为此,我会将以下列添加到每个表中:
VersionTime datetime -- Time when this versions becomes effective
IsCurrent bool -- Indicates whether this version is the most current (and not deleted)
Run Code Online (Sandbox Code Playgroud)
如果您只需要知道记录的最新版本是什么,并且只需要单独枚举单个记录的先前版本,那么这很好。时间点查询比第二种变体更痛苦。
一个更通用的变体是这样的:可以在任何指定的有效时间范围内随时添加记录的版本。所以我可以声明一个实体的某些设置在 2013 年底之前有效,它的另一个版本在 2014 年有效,另一个版本将从 2015 年开始有效。这可用于存档旧数据(如上),并提前计划在未来某个时间使用不同的数据(并将此信息保存为存档)。为此,我会将以下列添加到每个表中:
ValidFrom datetime -- Time when this version becomes valid (inclusive)
ValidTo datetime -- Time when this version becomes invalid (exclusive)
Run Code Online (Sandbox Code Playgroud)
第二种方法基本上也可以代表第一种方法,但很难知道哪个版本是最新的 - 因为您还可以为将来添加版本。此外,ValidFrom/ValidTo 设计能够声明重叠范围,并且根据定义,具有最高 ValidFrom 的行应适用于这种情况。
现在我想知道如何实施有效的解决方案来管理和查询此类数据。通常,您可以使用任何类型的 WHERE、GROUP BY 和 JOIN 编写任何 SQL 查询来获取您想要的记录。但是应用版本控制后,您需要考虑每条记录的正确版本。因此,不是连接来自另一个表的记录的每个版本,而是必须添加适当的条件以仅选择在给定时间有效的版本。
一个例子:
SELECT a, b, c
FROM t1
Run Code Online (Sandbox Code Playgroud)
必须改为:
SELECT a, b, c
FROM …Run Code Online (Sandbox Code Playgroud) 在我大学的一个软件开发课上,老师一直提到在测验中我们需要确保吸气剂返回的磁场需要"保护".我想她的意思是课外的任何东西都不应该改变它.她没有提供更多的解释.
例如:
class Foo {
string[] bar = <some array contents>;
public string[] getBar() {
return bar;
}
}
Run Code Online (Sandbox Code Playgroud)
任何调用getBar的代码都可以修改该数组中的元素.你怎么防止这种情况发生?我假设对象本身应该能够修改数组,而不是对象之外的任何东西.
这不是作业帮助,因为测验是几周之久.我只是想更好地理解Java,因为我的老师没有很好地解释.
更新:教师不仅允许我们在场上使用protected作为访问修饰符.
我有一个ASP.NET 2.0 Web应用程序在一个众所周知的Web托管提供商的共享服务器上运行.偶尔我似乎得到这样的错误:
找不到文件'C:\ WINDOWS\TEMP\lxnmfrsz.dll'.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.IO.FileNotFoundException:找不到文件'C:\ WINDOWS\TEMP\lxnmfrsz.dll'.
我四处寻找,似乎这是一个常见的问题.一种解决方案是清除临时文件夹或重新启动IIS.由于我不能在我不拥有的服务器上访问这些东西,所以这些并不是真正的选择.我已经尝试使用web.config中的指令将temp目录设置为其他目录,但它似乎仍然使用默认的临时目录.还有其他方法可以更改临时目录和/或解决此问题吗?
我正在尝试使用Enterprise Library 4.1在ASP.NET MVC中设计一个应用程序我添加了Entity Framework POCO模板并将生成的实体移动到一个单独的"Entities"项目中.但是,我很难确定设计此应用程序的最佳方法.我假设ObjectContext应该与EDMX文件在同一个项目中.但是ObjectContext必须能够访问POCO.如果我创建存储库,则需要访问POCO和ObjectContext.我假设存储库逻辑和POCO应该在同一个项目中,但这不起作用,因为"POCO项目"和"EDMX项目"之间会有一个循环引用.我不想将ObjectContext放在"POCO项目"中,因为该项目不应该引用System.Data.
我已经四处搜索了一些例子,但几乎所有的例子我发现这个例子并没有使用最佳实践.也许我让这太复杂了.我只是想了解如何最好地设计应用程序.
entity-framework repository poco efpocoadapter entity-framework-4
我写下面的代码,
Task.Factory.StartNew<int>(async () =>
{
await Task.Delay(1000);
return 42;
});
Run Code Online (Sandbox Code Playgroud)
但是读取行出现在"async"关键字下,并且由于某些语法错误导致代码无法编译,有人可以建议我该怎么做?
多谢!
我正在尝试使用WPF为大学构建一个小应用程序,它不是一个网络应用程序,我正在使用sql server 2008用于此目的,我很想知道WCF是否可以用于此目的,并且请让我们知道为什么以及为什么不为此目的使用WCF.
DB在包含所有类等的代码库项目中处理.
谢谢你的时间.
asp.net ×2
c# ×2
.net-4.5 ×1
asp.net-mvc ×1
async-await ×1
database ×1
java ×1
poco ×1
repository ×1
sql ×1
unit-testing ×1
version ×1
wcf ×1