我向服务器发送请求,并希望在收到响应后有条件地重定向到另一个页面(非角度).因此,导航发生在then承诺的一部分内.
我试过了:
$location.path(url)
Run Code Online (Sandbox Code Playgroud)
和
$window.location.href = url;
$windo.location.reload();
Run Code Online (Sandbox Code Playgroud)
什么都行不通
但是如果我用setTimeout(navigate,0)重定向来包装这两个调用中的任何一个.
在消化周期中看起来像Angular guards url.
任何人都可以澄清或分享解释真实情况的链接.
这个问题看起来很奇怪但是从我的经验来看,我已经习惯了将键盘焦点设置为可聚焦元素,只需用鼠标点击即可; 然而,与用户控件的属性Focusable = true和IsTabStop = true出乎我,因为它通过标签获得键盘焦点,但保持无知鼠标点击.

这是印刷品.找不到这些问题意味着什么的答案.
更新.
找到了答案.这很简单.将它留给那些可能感兴趣的人.
问号表示在最后一次单元测试开始时没有运行特定测试.
更新.
此UI是由于安装了Resharper.
在干净的Studio中,运行测试变为灰色.
更新2
这个问题最初是"模拟与Web API一起工作吗?"
这个问题的问题是"是的,确实如此".
但问题不在于Web API,而在于模仿本身.(问题的描述如下)
但现在我想告诉其他人解决方案.
我的控制器是异步的,我错误的前提是模拟线程产生的任何线程都与其父线程具有相同的身份.
默认情况下为false:TPL不会跨线程进行模拟.
可以通过编程或配置启用模拟流.
请注意,应该对aspnet.config文件进行更改,而不是对应用程序的web.config进行更改.
正如这篇文章所述,每个应用程序池都可以设置aspnet.config文件.
而这篇文章的链接,恳请提供安德鲁讲述更详细的整体追求.
对于那些第一次打开模拟的人,我想要注意IIS 7.5有一个非常好的功能来输入模拟帐户的凭据.配置文件中不需要这些凭据,仅写入是很麻烦的.
<identity impersonate="true"/>
Run Code Online (Sandbox Code Playgroud)
输入凭据后,它们将自动添加到配置文件中.

原始问题:
我转而模仿并提供用户凭据.
<identity impersonate="true" usernName="foo" password="bar"/>
Run Code Online (Sandbox Code Playgroud)
但是当我通过Entity Framework连接到sql server时,我收到错误"用户{MachineName} $登录失败".那就是EF在IUSR账户下运行.同时WindowsIdentity.GetCurrent()返回'foo'用户的身份.
模拟帐户具有启用Windows身份验证的SQL Server所需的所有权限.
此外,如果我禁用模拟并只设置应用程序池以使用此标识的凭据运行,一切正常.
我无法理解为什么在模拟开启时它不起作用但AppPool在默认帐户下运行.
更新1
EF连接字符串是
<add name="PtKbEntities" connectionString="metadata=...;provider=System.Data.SqlClient;provider connection string="data source=...;initial catalog=...;Trusted_Connection=Yes;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
我在Win2008 Srv,IIS 7.5上托管应用程序
考虑以下变体:
class A
{
public virtual void Doit()
{
}
}
class B : A
{
public new virtual void Doit()
{
}
}
Run Code Online (Sandbox Code Playgroud)
要么
class B : A
{
public override virtual void Doit()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我无法找到返回的调用结果的差异 typeof(B).GetMethod("Doit");
在这两种情况下MethodInfo.DecalringType,B类和其他属性看起来都是一样的.我错过了什么或者没有办法区分它们吗?
更新:
当我在LINQPAd中运行示例时,我发现Attributes属性略有不同:
对于new virtual值为- PrivateScope,公共,虚拟HideBySig,VtableLayoutMask
为override- PrivateScope,公共,虚拟HideBySig
更新2:
我用Google搜索VtableLayoutMask并回到StackOverflow
Udate 3:
结果代码:
public static class MethodInfoExtensions
{
public static bool IsOverriden(this MethodInfo method)
{
Contract.Requires<ArgumentNullException>(method != null, …Run Code Online (Sandbox Code Playgroud) 这是XAML:
<DataGrid Grid.Column="0" AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Columns}"
x:Name="ColumnsGrid" RowHeaderWidth="0">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Binding="{Binding Path=Header}"
Header="{Binding ElementName=ColumnsGrid, Path=DataContext.Count, StringFormat=Columns ({0}), diag:PresentationTraceSources.TraceLevel=High}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
绑定返回错误:System.Windows.Data错误:2:无法找到目标元素的管理FrameworkElement或FrameworkContentElement.
我错过了什么?
更新:
答案如下:http: //blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx
这里发生了什么?Columns集合只是Datagrid中的一个属性; 此集合不在逻辑(或可视)树中,因此DataContext不会被继承,这会导致无法绑定.
更新2: 关于DataGrid警告的好文章:http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx
我想禁止大量方法的重入.
单个方法适用于此代码:
bool _isInMyMethod;
void MyMethod()
{
if (_isInMethod)
throw new ReentrancyException();
_isInMethod = true;
try
{
...do something...
}
finally
{
_isInMethod = false;
}
}
Run Code Online (Sandbox Code Playgroud)
为每种方法做这件事都很繁琐.
所以我使用了StackTrace类:
public static void ThrowIfReentrant()
{
var stackTrace = new StackTrace(false);
var frames = stackTrace.GetFrames();
var callingMethod = frames[1].GetMethod();
if (frames.Skip(2).Any( frame => EqualityComparer<MethodBase>.Default.Equals(callingMethod,frame.GetMethod())))
throw new ReentrancyException();
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但看起来更像一个黑客.
.NET Framework是否有特殊的API来检测重入?
我们想切换到.net 4.5,因为它提供了许多改进.
但是......有时我发现了一些关于框架中不是微不足道的变化的棘手细节.
让我们将TPL未观察到的异常处理视为一个例子:
如果您不等待传播异常的任务或访问其Exception属性,则在对任务进行垃圾回收时,将根据.NET异常策略升级异常.(注意,"例外政策"一词没有任何联系或澄清)
嗯,这似乎是.Net v.4.0中的行为
但Stephen Toub 告诉我们更多:
为了使开发人员更容易编写基于Tasks的异步代码,.NET 4.5更改了未观察到的异常的默认异常行为.虽然未观察到的异常仍会导致引发UnobservedTaskException事件(不会这样做会发生重大变化),默认情况下进程不会崩溃.相反,无论事件处理程序是否观察到异常,异常将在引发事件后最终被吃掉.但是,可以配置此行为.可以使用新的CLR配置标志恢复到.NET 4的崩溃行为.
请注意,此更改并不意味着开发人员应该忽略忽略未处理的异常...它只是意味着运行时比使用它更宽容成为.
这是一个很大的惊喜.考虑到文档中没有更新.
所以,我想知道在.Net v4.5中发生的其他"无声"变化我更了解
.请分享您的知识.
PS这里的单词"沉默"是指Wat的新文章甚至官方文档中难以得知的变化.
考虑我已导出界面
export interface IMyAngularService{
}
Run Code Online (Sandbox Code Playgroud)
当我们注册服务或工厂时,我们通常使用函数名作为注册服务的名称或简单的可派生字符串(例如'ISomeService' - >'SomeService');
稍后我可以决定重命名界面,并希望依赖描述自动更改:
class MyController{
static $inject = [
dependency(nameof<ISomeService1>),
dependency(nameof<ISomeService2>)
];
constructor(...dependencies){
}
}
Run Code Online (Sandbox Code Playgroud)
其中dependency函数通常从接口名称获取服务名称.因此,无论何时ISomeService1更改名称,结果JavaScript都包含更改的字符串.
我需要把重点放在UserControl自己身上,而不是它的孩子身上.
否则我无法从缓冲区实现插入.:(
设置Focusable=True没有帮助.谷歌和SO只告诉如何将焦点设置为UserControl孩子.
我的控件包含:
- 工具栏,其中有几个按钮绑定到相应VM的命令
- TextBox,它是过滤器的输入
- DataGrid - 项目列表.
我需要将Ctrl + V命令绑定到VM.但是要处理这个姿势UserControl必须集中精力.如果网格中没有项目(VM的集合为空),则禁用按钮,并且唯一可以获得焦点的元素是TextBox.但它以自己的方式处理Ctrl + V,我不想改变这种行为.
因此,当我单击UserControl区域时,我需要设置焦点.
我相信UserControl是它的最佳候选者.
但我不知道如何让它可以选择.
.net ×4
wpf ×3
c# ×2
focus ×2
.net-4.0 ×1
.net-4.5 ×1
angularjs ×1
binding ×1
reentrancy ×1
reflection ×1
resharper ×1
typescript ×1
unit-testing ×1