我希望能够检查值是否是其值类型的默认值.理想情况下,我想说:
DoSomething<TValue>(TValue value) {
if (value == default(TValue)) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器抱怨它无法==
在TValue和TValue上进行比较.这是我迄今为止提出的最好的解决方法:
DoSomething<TValue>(TValue value) {
if (value == null || value.Equals(default(TValue))) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅/正确的方法来解决这个问题?
关于单身人士是否"不好"以及使用什么样的模式,存在很多问题.它们通常专注于单例设计模式,它涉及从类上的静态方法中检索单例实例.这不是其中一个问题.
自从几个月前我真正"发现"依赖注入以来,我一直在推动它在我们团队中的应用,随着时间的推移从我们的代码中删除静态和单例模式,并尽可能使用基于构造函数的注入.我们采用了约定,因此我们不必继续向DI模块添加显式绑定.我们甚至使用DI框架来提供记录器实例,这样我们就可以自动告诉每个记录器它没有附加代码.现在我有一个地方可以控制各种类型的绑定方式,很容易确定特定类别(实用程序类,存储库等)的生命周期.
我最初的想法是,如果我希望它们经常被使用,那么将类绑定为单例可能会有一些优势.它只是意味着new
正在进行的事情要少得多,特别是当你正在创建的对象最终有一个很大的依赖树时.几乎所有这些类中的非静态字段都是注入构造函数的值,因此在不使用实例时保持实例的内存开销相对较小.
然后我在www.codingwithoutcomments.com上读到"Singleton我爱你,但是你让我失望",这让我想知道我是否有正确的想法.毕竟,Ninject默认编译对象创建函数,因此创建这些对象的其他实例时所涉及的反射开销非常小.因为我们将业务逻辑保留在构造函数之外,所以创建新实例是一个非常轻量级的操作.并且对象没有一堆非静态字段,因此创建新实例也不会产生大量内存开销.
所以在这一点上,我开始认为它可能无论多么重要.还有其他考虑因素我没有考虑过吗?是否有人通过改变某些类型物体的生命周期实际上经历了性能的显着改善?遵循DI模式是唯一真正重要的事情,还是有其他原因使用对象的单个实例本质上是"坏"?
我刚刚在http://w3fools.com/#html_forms上阅读了以下内容:
<input>
在<form>
HTML5之前,非块级元素(例如)在标记内部无效.
我从来没有听说过这些内容,我看到的每个基本HTML教程似乎都很好,将输入标签直接放在表单标签中.所以我的问题有三个部分:
我正在开发一个应用程序来帮助我的办公室跟踪和管理评论.在应用程序中,我使用JPA 2.0和Hibernate 3.6.3作为我的底层提供程序.我也使用spring将持久化上下文注入到我的DAO中.我建立了域名,以便有一个评论,一个参与者和一个角色实体.
我遇到的问题是,如果参与者有多个角色,当我从实体经理获得评论时,参与者列表中存在相同参与者的重复副本(即相同的ID).我还发现重复数量与角色数量直接相关(即如果参与者有3个角色,那么参与者在评论的参与者列表中出现3次)
我之前使用过直接的Hibernate,但这是我第一次使用JPA,所以我确定我配置错了.我只是不知道它是什么.
这是代码:
评论:
@Entity
public class Review extends BaseModel{
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER, optional=false)
private Item item;
@Column(name="ISNEW", nullable=false)
private boolean isNew;
@Enumerated(EnumType.STRING)
@Column(name="STATUS", nullable=false)
private ReviewStatus status;
@Enumerated(EnumType.STRING)
@Column(name="PHASE", nullable=false)
private Phase phase;
@Enumerated(EnumType.STRING)
@Column(name="REVIEW_TYPE", nullable=false)
private ReviewType reviewType;
@OneToMany( cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<Participant> participants;
@OneToMany(cascade=CascadeType.ALL)
private List<Defect> defects;
@Column(name="START_DATE", nullable=false)
private Date startDate;
@Column(name="MEETING_DATE", nullable=false)
private Date meetingDate;
@Column(name="FINISH_DATE")
private Date finishDate;
@Column(name="DURATION", nullable=false)
private Double duration;
public Item getItem()
{
return item;
}
public void …
Run Code Online (Sandbox Code Playgroud) 这里有一些代码来说明我遇到的问题.jsFiddle演示
<div class="normal">
<a href="#">Test</a>
<a href="#">Test longer</a>
</div>
<div class="ib blockbyclass">
<a href="#">Test</a>
<a href="#">Test longer</a>
</div>
<div class="ib">
<a href="#" style="display: block;">Test</a>
<a href="#" style="display: block;">Test longer</a>
</div>
Run Code Online (Sandbox Code Playgroud)
body{background-color: gray;}
div{float:left; margin: 5px;}
a {background-color: black; color: white;}
div.ib a {display: inline-block;}
div.normal > a {display: block;}
div.blockbyclass> a {display: block; }
Run Code Online (Sandbox Code Playgroud)
我有一种特定类型的链接,在大多数情况下需要呈现为内联块,但在某些情况下需要呈现为块元素.具体来说,我希望它们各自出现在自己的行上并占据包含div的整个区域.在这种特殊情况下,div
包含链接的设置为float,因此它将根据其中最大的链接调整自身大小.IE8,IE9,Firefox和Chrome正确呈现这些链接,但无论我做什么,IE7都拒绝忘记display: inline-block
规则.
如何让IE7以"块"模式显示这些元素?
我们的日志报告ThreadAbortException
是以看似随机的间隔停止我们的Quartz.NET作业.根据我的理解,这通常不会由线程本身正在做的事情引起(例如从FTP服务器读取文件,或执行LINQ to Entities查询),而是因为某些外部进程告诉线程停止.此外,创建日志的方式使我相信当我们收到这些错误时,整个Web应用程序正在重新启动,因此我猜测重启过程是导致线程首先被中止的原因.
所以我的问题是:我怎样才能找出服务器/应用程序重启的原因?是否有某些日志会在每次重启时向我提供详细信息?我应该调查这样的事情的常见原因吗?
在此先感谢您的帮助.
编辑
我刚刚与一些同事进行了讨论,听起来IIS会在一段时间不活动后自动将应用程序置于休眠状态,这可能是问题的一部分.通过一些研究,我发现了IIS中工作线程的"空闲超时"设置.我认为当应用程序在一段时间内没有处理任何请求时,它会发出一个shutdown命令.出于某种原因,Quartz不会立即关闭,而是等待下一个作业被触发,然后系统检测到该作业的线程并在尝试运行时将其杀死.
因此,当系统想要关闭时,我想我们需要想出一些方法来优雅地完成任何正在运行的作业,并且如果没有运行任何作业,Quartz实际上会关闭它.有没有人有这种问题的经验?
我注意到StackOverflow使用基于表格的布局作为帖子下面的评论区域:
注意文本如何都保留在按钮区域的右侧,无论文本行数是多少.我试图使用无表格布局实现相同的效果,并且失败了.没有桌子,有没有什么好方法可以做到这一点?
我在这个项目上看了很多帖子,但找不到合适的解决方案.对不起,如果已经在某个地方回答了.
我想要的:
我有一个DIV
菜单项,当click
事件被触发一个href
元素时打开.现在我想隐藏菜单,当鼠标离开DIV
元素并且不在href
元素上方时.到目前为止,我只能在单击href
元素时关闭它.
所以,我的jQuery看起来像这样:
$("#menu_opener").click(function () {
if ($("#menudiv").is(":hidden")) {
$("#menudiv").slideDown("slow");
} else {
$("#menudiv").hide();
}
});
Run Code Online (Sandbox Code Playgroud)
我的HTML看起来像这样:
<div>
<a href="#" id="menu_opener">Menu</a>
</div>
<div id="menudiv" style="position: fixed; background-color: white; display: none;">
<a href="#" id="A1">Page 1</a><br />
<a href="#" id="A2">Page 2</a><br />
<a href="#" id="A3">Page 3</a><br />
</div>
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我正在创建一个Angular 2组件,当使用某个Observable模式时,Angular的变化检测对我不起作用.它看起来像这样:
let getResult$ = this.http.get('/api/identity-settings');
let manager$ = getResult$
.map((response) => /* -- create manager object -- */);
let signinResponse$ = manager$
.flatMap(manager => manager.processSigninResponse());
this.readyToLogin$ = manager$.map(() => true).startWith(false);
this.isLoggedIn$ = signinResponse$.map(() => true).startWith(false);
Run Code Online (Sandbox Code Playgroud)
然后在我的模板中:
<h1>Ready to Log In: {{readyToLogin$ | async}}</h1>
<h1>Logged In: {{isLoggedIn$ | async}}</h1>
Run Code Online (Sandbox Code Playgroud)
由于readyToLogin$
Observable基于响应于http.get()
(Angular"猴子补丁"以确定它何时需要检测更改)而发生的同步操作集,因此"准备登录"消息true
在适当的时间切换到.
但是,由于processSignInResponse()
生成a Promise<>
,订阅结果的任何内容都flatMap
与http请求的完成事件异步发生.因此,它需要手动干预以通知组件的区域它需要检查更改.
如何在解决任何订阅后知道检测更改signInResponse$
的方式包装observable NgZone
?
布兰登的答案一直有效,直到我更新到RC5,此时事情再次停止了.原来我使用borked Zone.js的第三方库.一旦解决了这个问题,就根本不需要使用解决方法 - 内置的猴子补丁工作正常!
将AutoFixture与AutoFixture.AutoMoq包一起使用时,我有时会发现没有配置为正确测试他们要测试的东西的测试,但由于默认(松散)模拟行为,问题从未被发现:
public interface IService
{
bool IsSomethingTrue(int id);
}
void Main()
{
var fixture = new Fixture()
.Customize(new AutoMoqCustomization());
var service = fixture.Freeze<Mock<IService>>();
Console.WriteLine(service.Object.IsSomethingTrue(1)); // false
}
Run Code Online (Sandbox Code Playgroud)
我想让Mocks用严格的行为创建,所以我们被迫调用Setup()
我们期望被调用的方法.我可以为每个单独的模拟这样做:
fixture.Customize<Mock<IService>>(c => c.FromFactory(() => new Mock<IService>(MockBehavior.Strict)));
Run Code Online (Sandbox Code Playgroud)
但是在梳理了AutoMoqCustomization()的源代码以及各种ISpecimenBuilder
其他实现之后,我很遗憾只能让所有的Mocks用严格的行为进行初始化.该框架看起来非常灵活和可扩展,所以我确信有一种简单的方法可以做到这一点 - 我无法弄清楚如何做到这一点.