小编Ram*_*ein的帖子

如何在MongoDB中使用十进制类型

如何使用标准C#驱动程序在MongoDB中存储小数?似乎所有小数都作为字符串存储在数据库中.

c# mongodb

16
推荐指数
2
解决办法
4485
查看次数

AutoFac:注入NULL值

我想使用AutoFac在需要它的对象中注入当前主体.假设我有一个AuthorizationValidator正在执行安全检查的object().它看起来像这样:

public AuthorizationValidator : IAuthorizationValidator
{
  public AuthorizationValidator(IDataAccess dataAccess, IPrincipal principal)
  {
     // Save injected objects
     ...
  }

  public bool CheckPermission(Guid objectId, Action action)
  {
     // Check if we are authorized at all
     if (this.principal == null)
       return false;

     // Check the permission in the database
     ...
  }
}
Run Code Online (Sandbox Code Playgroud)

对于我的Web应用程序,AuthorizationValidator已注册,我使用以下注册来注入主体:

builder.Register<IPrincipal>((c, p) => HttpContext.Current?.User);
Run Code Online (Sandbox Code Playgroud)

其他类型的应用程序使用线程的主体或类似的东西.需要主体的所有对象都会注入适当的主体.

如果未经授权进行调用,则AutoFac会引发异常,告诉我它无法提供IPrincipal对象,因为工厂已返回null.在这种情况下,空主体是好的,不应引发异常.

c# null autofac

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

如何将Azure保留IP(经典)迁移到Azure公共IP(ARM)?

将Azure中的服务从经典模型迁移到Azure资源管理器(ARM)时,经典模型中可能会有一些保留的IP地址。保留IP的ARM副本是公用IP。创建新的公共IP将产生另一个IP地址,并可能导致将您的IP地址列入白名单的客户端出现问题。

尽管最好使用基于FQDN的白名单。但是,有时这是不可能的,IP白名单是次佳的选择。如何在不获取新IP地址的情况下从保留IP地址迁移到公共IP地址?

azure azure-resource-manager

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

AngularJS:在指令中初始化隔离范围

我创建了一个接受一些属性的指令,并使用这些属性初始化隔离的作用域.如果未指定属性,则应使用计算值初始化隔离范围.

我添加了一个链接函数来检查范围并初始化默认值(如果没有使用属性设置值).范围已初始化,但如果我设置了默认值,那么框架将稍后覆盖它.

解决方法是使用$ timeout(...)并在之后设置它,但这似乎太过分了.

function ($timeout) {
  return {
    scope: { msg1: '@', msg2: '@' },
    template: '<div>{{msg1}} {{msg2}} {{msg3}}</div>',
    link: function ($scope, $elt, $attr) {
      var action = function() {
        if (!$scope.msg2) $scope.msg1 = 'msg1';
        if (!$scope.msg2) $scope.msg2 = 'msg2';
        if (!$scope.msg3) $scope.msg3 = 'msg3';                
      };
      action();
      //$timeout(action, 0);
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

我准备了一个JSFiddle来说明发生了什么.

  • msg1通过属性初始化,并始终具有正确的值.
  • msg2未通过属性初始化,但可以使用属性进行设置.调用链接方法后,将覆盖此值.
  • msg3没有通过属性初始化,甚至不可能.在构造控制器时设置该值并且工作正常.

似乎AngularJS在创建控制器并将指令链接到DOM之后创建范围并更新其值.谁能告诉我推荐的方法呢?

angularjs angularjs-directive angularjs-scope

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

FFMPEG 慢速 VP8 编码

我正在尝试将网络摄像头中的视频编码为 VP8 流。使用 Chrome 从我的网络摄像头发送 WebRTC 流看起来非常好,并且不会占用大量 CPU 资源。当我尝试使用 FFMPEG 将我的网络摄像头流转码为 VP8 (webm) 时,它非常非常慢。

在 OS XI 上,使用以下 FFMPEG 选项生成 VP8 webm 文件。来源是一个 720p Facetime 网络摄像头。它耗尽了我的 CPU 使用率(2011 年末核心 i7 MBP)并且质量不是很好:

ffmpeg -f avfoundation -i 'default' -y -qmin 11 -qmax 45 -b:v 500k -cpu-used 0 -deadline realtime test.webm
Run Code Online (Sandbox Code Playgroud)

WebRTC 使用哪种协议,Chrome 怎么能这么快?我的印象是 VP8 不能在硬件中完成。使用现代英特尔 CPU,您可以使用 QuickSync,但我猜这只是 H.264,FFMPEG 不支持。

google-chrome webm vp8 webrtc

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

为什么没有为所有返回任务的功能显示CS4014?

假设以下代码:

private async Task Test1Async() => await Task.Delay(1000).ConfigureAwait(false);
private Task Test2Async() => Test1Async();
Run Code Online (Sandbox Code Playgroud)

从功能上讲,这些功能完全相同,但是编译器对待调用这些方法的方式有所不同。以下代码可以编译,但是会发出CS4014警告:

private void Test() => Test1Async();   // CS4014 is shown
Run Code Online (Sandbox Code Playgroud)

它生成警告“ 因为未等待此调用,当前方法在调用完成之前继续运行 ”。这是一个适当的警告,因为它通常表明您的代码中存在缺陷。如果确实需要此行为,则可以使用以下代码解决它:

private void Test() => _ = Test1Async();   // CS4014 is not shown anymore
Run Code Online (Sandbox Code Playgroud)

将值分配给_是一个相对的新功能,指示有意忽略该值。

此代码不会引发CS4014:

private void Test() => Test2Async();   // CS4014 is not shown!
Run Code Online (Sandbox Code Playgroud)

当然,我可以重写所有方法以使用该async/await方法,但这会导致更多代码运行效率较低(由于async关键字生成的状态机)。也许我永远都不会忘记它,但是我的同事可能会再也不会得到触发器(或者我称之为不使用异步的第三方库)。

关于返回的任务使用情况的警告也有所不同。

有谁知道为什么对于Task不使用async关键字返回a的方法未生成此警告?

c# async-await

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

如何等到 MSTSC.exe 退出

我创建了一个管理应用程序,它还允许快速访问远程计算机的远程桌面会话。我需要等到进程结束,这样我才能关闭到远程服务器的 VPN 连接。一切正常,除了等待进程结束。

以下代码用于启动 MSTSC 进程并等待它结束:

var process = new Process
{
  StartInfo = new ProcessStartInfo("mstsc.exe"),
  EnableRaisingEvents = true
};
process.Exited += (o, e) => Console.WriteLine("Process stopped.");
process.Start();
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

Exited事件几乎在程序启动后立即引发。当我mstsc.exenotepad.exe一切替换时按预期工作。我认为 MSTSC 可能会自己分叉并中止初始过程。

但是可以使用以下命令(来自命令行)等待 MSTSC 结束:

start /wait mstsc.exe
Run Code Online (Sandbox Code Playgroud)

在我退出远程桌面会话之前,此命令不会返回。鉴于这些信息,我用这个替换了我的代码:

var process = new Process
{
  StartInfo = new ProcessStartInfo("cmd.exe"),
  Arguments = "/c start /wait mstsc.exe",
  EnableRaisingEvents = true
};
process.Exited += (o, e) => Console.WriteLine("Process stopped.");
process.Start();
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

这将运行 CMD.exe 并发出start /wait mstsc.exe …

.net c# mstsc

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

在 Rust 中将结构的 Vec 映射到结构的另一个 Vec,无需克隆

我使用具有以下结构的库:

struct KeyValue1 {
    key: Vec<u8>,
    value: Vec<u8>,
}

fn get() -> Vec<KeyValue1> { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

我需要将此向量转换为具有以下结构的几乎相似的向量:

struct KeyValue2 {
    key: Vec<u8>,
    value: Vec<u8>,
}
Run Code Online (Sandbox Code Playgroud)

为了能够从一个向量转换为另一个向量,我目前使用以下代码:

let convertedItems = items.iter().map(|kv| -> KeyValue2{
  key: key.clone(),
  value: value.clone()
}).collect()
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它克隆了两个载体,效率很低。我不再需要原始items向量,因此我想将所有权从 转移KeyValue1KeyValue2,但我还没有找到方法来做到这一点。

struct closures iterator rust map-function

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

如何处理 C# 中的枚举 0(CA1008 讨论)

规则CA1008指定所有枚举都应该有一个0应该命名的值Unknown(我们在这里不讨论标志)。我理解您想要防止未初始化的值自动获得含义的原因。假设我定义了以下枚举:

enum Gender
{
    Male,
    Female
}

class Person
{
    public string Name { get; set; } 
    public Gender Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这指定了每个人都应该是男性或女性(让我们暂时忽略性别讨论)。如果我忘记设置Gender属性,则此人自动为男性,这可能会导致问题。出于这个原因,我理解 CA1008 警告,因此 0 值应该保留给未知/未初始化的值。

因此,让我们将Gender枚举更改为不再使用 0 值:

enum Gender
{
    Male = 1,
    Female = 2
}
Run Code Online (Sandbox Code Playgroud)

当我不指定性别时,那么这个人就不是男性或女性。序列化过程中可能会出现问题。该值0对于调试期间的枚举不是很具有描述性。为了修复它并避免 CA1008 警告,我再次更改枚举:

enum Gender
{
    Unknown = 0,
    Male = 1,
    Female = 2
}
Run Code Online (Sandbox Code Playgroud)

未初始化的属性现在显示为Unknown看起来不错。但是我可能引入了另一个问题,那就是该Unknown值看起来像一个有效值并且可以应用于用户。我也可能会收到有关不处理所有枚举值的警告。假设,我使用的构造函数要求我指定性别和名称以避免未初始化的属性:

public Person(string name, Gender …
Run Code Online (Sandbox Code Playgroud)

c# enums code-analysis

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