小编Sco*_*son的帖子

防止JIT内联方法

我有一种独特的情况.我一直在开发一个用于发送电子邮件的开源库.在这个库中,我需要一种可靠的方法来获取调用方法.我StackTrace通过分析其中的StackFrame对象来做到这一点.这在调试模式项目中没有问题,其中优化已关闭.

当我切换到启用优化的发布模式时,会出现问题.堆栈跟踪如下所示:

> FindActionName at offset 66 in file:line:column <filename unknown>:0:0
> Email at offset 296 in file:line:column <filename unknown>:0:0
> CallingEmailFromRealControllerShouldFindMailersActionName at offset 184
     in file:line:column <filename unknown>:0:0
> _InvokeMethodFast at offset 0 in file:line:column <filename unknown>:0:0
> InvokeMethodFast at offset 152 in file:line:column <filename unknown>:0:0
...
Run Code Online (Sandbox Code Playgroud)

这是从失败的单元测试中获得的.在这个跟踪的第3行中,我应该看到一个被称为TestEmail在其他地方定义的方法,但我相信JITter正在内联它.我已经读过你可以通过使方法虚拟来防止内联,但这不起作用.有没有人知道一种可靠的方法来防止方法内联,所以你的方法会出现在堆栈跟踪中?

c# jit inlining

28
推荐指数
2
解决办法
7894
查看次数

Autofac相当于Ninject的WhenInjectedInto()

所以我们正在努力将一些项目从Ninject转换为Autofac,我们偶然发现了Ninject中非常简洁的东西,我们无法弄清楚如何在Autofac中做到这一点.在我们的应用程序中,我们有一个名为的接口ISession,它以两种不同的具体类型实现.一个进入Oracle数据库,另一个进入MS-SQL数据库.

我们的MVC应用程序中有控制器,它们只需要一个ISession的具体实现,基于它们被注入哪个控制器.例如:

Bind<IFoo>().To<Foo1>();
Bind<IFoo>().To<Foo2>().WhenInjectedInto<OracleController>();
Run Code Online (Sandbox Code Playgroud)

我的问题是:我们如何在Autofac中实现相同的结果?何时IFoo注入任何控制器,Foo1应默认提供,但在一个特殊情况下,我们需要Foo2.

在此先感谢您的帮助!

dependency-injection ninject inversion-of-control autofac asp.net-mvc-3

21
推荐指数
1
解决办法
2427
查看次数

如何让Spring为类中的同一验证器显示不同的基于验证包的消息?

首先,让我解释一下,我使用的是Spring MVC 3.1.1和Hibernate验证4.2.0.我在Spring应用程序中使用各种表单的验证注释.由于我的应用程序需要本地化,我一直在使用资源包来查看我的验证消息:

# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
Run Code Online (Sandbox Code Playgroud)

此消息的相应类定义如下所示:

@FieldMatch.List({
    @FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我在appContext.xml中设置了这个自定义资源包,我的消息显示在表单上没有任何问题.

然而,这是我的困境.有一项新要求,我必须确认更多字段匹配.现在我只是确认两个密码字段匹配.现在我的要求是我必须确认电子邮件地址.我知道这是一个愚蠢的要求,但我不能改变它.所以现在类定义将如下所示:

@FieldMatch.List({
    @FieldMatch(first = "password", second = "passwordConfirmation")
    @FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

显然,我当前的资源包不起作用,因为我需要两个单独的消息(每个匹配一个).我已尝试使用message="{emails.must.match}"然后在资源包中定义该消息,但它实际上从未显示消息,它只显示实际文本{email.must.match}.

所以解释之后,我的问题很简单:如何让FieldMatch类级别的每个验证器都有一个在资源包中定义的不同消息,以便它可以被本地化?

在此先感谢您的帮助!

[编辑]对于那些好奇的人,FieldMatch我正在使用的验证器.

更新5/23/2012 这是其他人要求的bean定义:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>ErrorBundle</value>
            <value>ForgotPasswordBundle</value>
            <!-- etc etc -->
        </list>
    </property>
</bean> …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc hibernate-validator bean-validation

8
推荐指数
1
解决办法
2869
查看次数

使用Mercurial SCM进行分支

所以现在我正在学习Ruby on Rails,我正在阅读"使用Rails进行敏捷Web开发"一书.我还决定要给Mercurial一个机会,因为我已经阅读了分布式SCM,这似乎是一个理想的情况.但是,我仍然喜欢将我的代码远程推送到我的Linux VPS,只是因为我的硬盘驱动器决定进行潜水.

所以,我的问题特别针对Mercurial中的分支.现在我已经设置了一个远程存储库,我可以轻松地通过SSH推送更改(我甚至设置了一个Nginx FastCGI站点,让我也可以推送).然而,我想要做的是为每个章节创建分支,因为我可以通过这本书来处理我的进度.所以这就是我正在做的事情:

$ hg branch chapter-10
(do chapter 10 stuff)
$ hg commit -m "Chapter 10 complete"
$ hg update default
$ hg merge chapter-10
$ hg commit -m "Merging chapter 10 into default"
$ hg push

一旦我执行了push语句,我从Mercurial得到这条消息:

pushing to ssh://myserver/hg/depot
searching for changes
abort: push creates new remote branch 'chapter-10'!
(did you forget to merge? use push -f to force)

所以在这一点上我尝试再做hg merge一次,它告诉我没有什么可以合并,这显然是正确的,因为我刚刚合并它.当我用-f强制推送时,一切看起来都很好,甚至Web界面也显示了合适的分支.

总而言之,我的问题很简单:我这样做是正确的吗?有没有更合适的方法来使用Mercurial(即"Mercurial方式")?老实说,我只是希望存储库充当备份.我是分布式SCM模型的粉丝,但对我来说,强迫推动感觉有点"脏".非常感谢任何见解!提前致谢.

version-control mercurial branch

7
推荐指数
1
解决办法
2049
查看次数

当用作方法参数的前缀时,"this"是什么意思?

我确定答案是显而易见的,我有点不好意思我已经不知道答案,但考虑一下我在阅读"Professional ASP.NET MVC 1.0"时选择的以下代码示例:

public static class ControllerHelpers
{
    public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors)
    {
        foreach (RuleViolation issue in errors)
            modelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解这个静态方法正在做什么,但我不明白的是"this"这个词在方法签名中的用途是什么.任何人都可以开导我吗?

c# extension-methods language-features

6
推荐指数
1
解决办法
690
查看次数

函数如何在<script>标记内作用域/命名空间?

我正在使用Knockout.js和jQuery构建一个新的应用程序.我更喜欢"use strict"在我的脚本中,但由于我们使用的某些库不能使用,"use strict"所以我必须使用函数形式.

我不喜欢将javascript放在<script>标签内联中,所以我通常将所有内容都放在一个单独的文件中,这样它就可以被预处理器缩小和缩小.

鉴于这些标准,我想知道在脚本标记中创建函数时,默认情况下函数的作用域.现在我正在做这样的事情:

$((function(win) {
    "use strict";

    win.myFunction = function () {
        // do stuff
    };
}(window)));
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我将函数放在我的window对象上,因此我可以在我的视图中调用它们.我注意到我可以在我的jQuery模板中调用它们而不限定它们(即:我可以调用它myFunction而不是window.myFunction),但我担心这不适用于浏览器.是否所有浏览器都允许您在没有完全限定名称的情况下调用放置在窗口对象中的函数?我如何在我的匿名方法中将函数放在全局范围内,如上所述?

感谢您的见解!

javascript jquery knockout.js

5
推荐指数
1
解决办法
190
查看次数

如果我删除一个表并且表不存在,我会收到错误

我需要放一张桌子并换一张新桌子.如果我删除表并且表不存在,我会收到错误

如何检查表格是否存在?

我正在研究Oracle 11g

提前致谢.

oracle oracle11g

1
推荐指数
1
解决办法
8194
查看次数

需要帮助mysql查询

在我的MySQL表中,我有一个名为的列member_id.该列存储如下值:

1,2,3,4,5
Run Code Online (Sandbox Code Playgroud)

我需要通过使用来检查

SELECT * 
FROM member 
WHERE 5 IN member_id
Run Code Online (Sandbox Code Playgroud)

它运作不佳.请帮我写一个SQL查询,找到合适的结果.

mysql

0
推荐指数
1
解决办法
78
查看次数