我最近碰到了一个讨厌的bug,简化的代码如下所示:
int x = 0;
x += Increment(ref x);
Run Code Online (Sandbox Code Playgroud)
...
private int Increment(ref int parameter) {
parameter += 1;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
增量调用后的x值为1!一旦我发现发生了什么,这是一个简单的解决方案.我将返回值分配给临时变量,然后更新x.我想知道是什么解释了这个问题.这是我在忽略的规范或C#的某些方面.
我想要一个通用的404 Not Found页面(HTTP 200),而不是获得HTTP 404响应.我知道你可以在MVC 5中设置它
<customErrors mode="On">
<error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
但我似乎无法弄清楚如何在MVC 6中执行此操作.我猜它应该在UseMvc路由表或自定义中间件中.
类似于这个链接,但对于mercurial.我想找到最有助于我的mercurial存储库大小的文件.
我打算使用hg convert来创建一个新的,更小的存储库.我只是不确定哪些文件对存储库大小有贡献.它们可能是已被删除的文件.
在存储库历史记录中的任何位置找到这些内容的好方法是什么?有超过20,000个提交.我正在考虑使用PowerShell脚本,但我不确定最好的方法是什么.
我想知道如何使用DI管理对象.假设我有一堂课
class Foo : IFoo, IDisposable
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后这个类被注入另一个类
class Bar
{
public Bar(IFoo foo)
{
this.Foo = foo
}
IFoo Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我在一些范围内绑定它(我的例子使用MVC和Ninject)
this.Bind<IFoo>().To<Foo>().InRequestScope();
Run Code Online (Sandbox Code Playgroud)
我想知道,因为依赖注入框架处理生命周期Foo,我应该实现IDispoable Bar吗?我的想法是DI正在管理其生命周期Foo,所以不要触摸它,以防其他类使用Foo.此外,由于一次性对象Bar作为构造函数参数传递,因此Bar不会包装一次性对象,因此它不知道后面Bar要使用的调用者是如何进行垃圾回收的.这是正确的吗?FooBar
我有一个使用的控制台应用程序kernel.Get<SomeClass>();然而,SomeClass依赖于SomeDisposableClass.如何设置我的绑定以处理SomeDisposableClass何时SomeClass收集垃圾?我的MVC应用程序使用InRequestScope并且效果很好,但似乎没有类似的控制台应用程序范围.
这里的例子:
public class SomeClass {
public SomeClass(SomeDisposableClass c) {
this.C = c;
}
private SomeDisposableClass C { get; set; }
// ... Business Methods ... //
}
Run Code Online (Sandbox Code Playgroud)
我的模块
kernel.Bind<ISomeClass>().To<SomeClass>().In???Scope()
Run Code Online (Sandbox Code Playgroud)
我的控制台应用
public static void Main() {
SomeFunc();
SomeFunc();
Console.ReadLine();
}
public static void SomeFunc() {
ISomeClass someClass = kernel.Get<ISomeClass>();
// work
}
Run Code Online (Sandbox Code Playgroud)
我希望SomeDisposableClass在SomeFunc完成时(或调用垃圾收集器时)进行处理.但我不确定使用哪种绑定范围.InTransientScope永远不会召唤处置.我是否只需要制作SomeClass一次性的并Dispose()使用using声明在控制台应用程序中实现并包装我的所有用法?