小编Mic*_*ael的帖子

ref参数和赋值在同一行

我最近碰到了一个讨厌的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#的某些方面.

.net c# ref-parameters

11
推荐指数
2
解决办法
223
查看次数

找不到MVC 6 404

我想要一个通用的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路由表或自定义中间件中.

asp.net-mvc asp.net-core-mvc asp.net-core

9
推荐指数
2
解决办法
7853
查看次数

在Mercurial存储库中查找大文件

类似于这个链接,但对于mercurial.我想找到最有助于我的mercurial存储库大小的文件.

我打算使用hg convert来创建一个新的,更小的存储库.我只是不确定哪些文件对存储库大小有贡献.它们可能是已被删除的文件.

在存储库历史记录中的任何位置找到这些内容的好方法是什么?有超过20,000个提交.我正在考虑使用PowerShell脚本,但我不确定最好的方法是什么.

mercurial mercurial-convert

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

管理一次性类依赖注入

我想知道如何使用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

c# lifecycle dependency-injection ninject

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

具有处理的Ninject瞬态范围

我有一个使用的控制台应用程序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)

我希望SomeDisposableClassSomeFunc完成时(或调用垃圾收集器时)进行处理.但我不确定使用哪种绑定范围.InTransientScope永远不会召唤处置.我是否只需要制作SomeClass一次性的并Dispose()使用using声明在控制台应用程序中实现并包装我的所有用法?

c# scope dependency-injection ninject

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