在我的基本控制器的构造函数中,我调用一个扩展方法来检查客户端上的特定cookie.
目前我正在使用System.Web.HttpContext.Current来获取当前上下文.
但是,我认为我应该使用Controller.HttpContext,因为它更可测试并包含有关请求的其他信息.
但是,Controller.HttpContext在创建时返回null(相信这是设计),而且还在Initialize和Execute方法上返回null(除非我使用Routing.RequestContext.HttpContext?).
所以,如果我应该使用Controller.HttpContext而不是HttpContext.Current,请求在什么时候可以使用它?
谢谢Ben
我有这种情况:
interface MessageListener
{
void onMessageReceipt(Message message);
}
class MessageReceiver
{
MessageListener listener;
public MessageReceiver(MessageListener listener, other arguments...)
{
this.listener = listener;
}
loop()
{
Message message = nextMessage();
listener.onMessageReceipt(message);
}
}
Run Code Online (Sandbox Code Playgroud)
我想避免以下模式:(在客户端构造函数中使用this)
class Client implements MessageListener
{
MessageReceiver receiver;
MessageSender sender;
public Client(...)
{
receiver = new MessageReceiver(this, other arguments...);
sender = new Sender(...);
}
.
.
.
@Override
public void onMessageReceipt(Message message)
{
if(Message.isGood())
sender.send("Congrtulations");
else
sender.send("Boooooooo");
}
}
Run Code Online (Sandbox Code Playgroud)
我需要上述功能的原因是因为我想在onMessageReceipt()函数中调用发送者,例如发送回复.但是我不想将发送者传递给监听器,所以我能想到的唯一方法就是在实现监听器的类中包含发送者,因此产生上述客户端实现.有没有办法在构造函数中不使用'this'来实现这个目的?感觉很奇怪,我不喜欢它,因为我在完全构建之前将自己传递给一个对象(MessageReceiver).另一方面,MessageReceiver不是从外部传递的,它是在内部构造的,但这是否"净化"了奇怪的模式?我正在寻找一种替代或某种保证,这种安全,或者它可能适得其反.
switch语句是在Java中实现运算符解释的最快方法
public boolean accept(final int op, int x, int val) {
switch (op) {
case OP_EQUAL:
return x == val;
case OP_BIGGER:
return x > val;
case OP_SMALLER:
return x < val;
default:
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
在这个简单的例子中,显然是的.现在想象你有1000个运营商.它还会比类层次更快吗?当类层次结构在速度上比switch语句更有效时,是否存在阈值?(在内存中显然不是)
abstract class Op {
abstract public boolean accept(int x, int val);
}
Run Code Online (Sandbox Code Playgroud)
然后每个操作员一个班级.
编辑:对不起,我应该通过答案的外观更具体.运营商是完全未知的,我正在使用JDk 1.4.没有选择.没有枚举.没有关闭.:(用户在许多选择中选择运算符.为简单起见,想象一下具有1000个操作的GUI列表,当用户选择一个时,选择switch语句的操作码.使用类层次结构,用户将选择一个我问这个问题是因为有人必须先测试过它.我不想创建1000个类和1000个虚假操作代码来测试它.如果没有人做过.我会测试它并报告结果,如果它们可能有任何意义.
我最近一直在做关于SOA和ESB等的大量研究.
我现在正在努力重新设计一些遗留系统,并且希望使用比现有更多的SOA架构来构建它.我们在大约5个网站中使用这些服务,我们现在使用我们的遗留系统遇到的最大问题之一就是我们几乎所有时间都在进行错误修复或更新时需要重新部署我们的5个网站,这些网站可能是非常耗时的过程.
我的目标是使服务之间的接口松散耦合,以便可以在不必重新部署所有相关服务和网站的情况下进行更改.
我需要能够扩展现有的服务接口,而不会破坏或更新任何依赖项.有没有人遇到过这个问题?你是怎么解决的?
我有使用预编译头的代码.(之前由其他人完成)
在其中,它们包括几个.h文件.
如果我有使用普通.h文件的类,这些文件当前不在现有的预编译头文件中,那么将它们扔在那里有什么好处呢?也许编译速度,但我认为它会清理类/标题有点过吗?
对预编译的标题有什么作用和不做什么?
我使用以下DataGrid
<DataGrid Grid.Row="1" Grid.Column="1" Name="Grid" ItemsSource="{Binding}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="100" Binding="{Binding Path=Name}"></DataGridTextColumn>
<DataGridTextColumn Header="OldValue" Width="100" Binding="{Binding Path=OldValue}"></DataGridTextColumn>
<DataGridTextColumn Header="NewValue" Width="100*" Binding="{Binding Path=NewValue}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我怎样才能使细胞只读?
我正在尝试创建一个子表单,帮助用户输入父表单中字段的数据.我希望这个子窗体是模态的,但是我需要做什么才能使这个窗体模态化?
我需要使用不同类型的物品吗?
[注意:还有另一个关于这个问题的帖子,但它没有回答这个问题.]
对于Eclipse中的一个特定项目,问题视图不会显示错误.它显示警告但不显示错误.其他项目确实显示错误(以及其他所有内容).对于那个有问题的项目,我可以看到文件中的红色波浪形错误行.但是,目录结构不显示错误图标,并且错误未在问题视图中填充.
有任何想法吗?
如何将以下C#代码转换为VB.NET?
private static readonly ICollection<string>
_skipHeaders = new[]
{
"Connection",
"Keep-Alive",
"Accept",
"Host",
"User-Agent",
"Content-Length",
"Content-Type",
"Accept-Encoding",
"Authorization",
"Referer",
ProxyMethodHeader,
ProxyAuthorizationHeader,
ProxyAcceptHeader,
ProxyAgentHeader,
ProxyQueryHeader
};
Run Code Online (Sandbox Code Playgroud) 我们正在从Subversion迁移到Mercurial.为了促进迁移,我们正在创建一个中间Mercurial存储库,它是我们的Subversion存储库的一个副本.所有开发人员将开始切换到Mercurial存储库,我们将定期将更改从中间Mercurial存储库推送到现有的Subversion存储库.经过一段时间后,我们将简单地废弃Subversion存储库,中间的Mercurial存储库将成为新的记录系统.
Dev 1 Local --+--> Mercurial --+--> Subversion
Dev 2 Local --+ +
Dev 3 Local --+ +
Dev 4 -------------------------+
Run Code Online (Sandbox Code Playgroud)
我一直在测试它,但是当我将更改从本地存储库推送到中间Mercurial存储库,然后直到我们的Subversion存储库时,我一直遇到问题.
alt text http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/01.png
在我的本地计算机上,我有一个已提交的变更集,可以将其推送到我们的中间Mercurial存储库.在这里你可以看到它是版本#2263,哈希625 ...
alt text http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/02.png
我只将此变更集推送到远程存储库.
替代文字http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/03.png
到目前为止,一切看起来都很好 变更集已被推送.
hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Run Code Online (Sandbox Code Playgroud)
我现在切换到远程存储库,并更新工作目录.
hg push
pushing to svn://...
searching for changes
[r3834] bmurphy: database namespace
pulled 1 revisions
saving bundle to /srv/hg/repository/.hg/strip-backup/62539f8df3b2-temp
adding branch
adding changesets
adding manifests
adding file changes
added 1 changesets …Run Code Online (Sandbox Code Playgroud)