小编Ran*_*ger的帖子

使用Controller类以外的类的依赖注入

此时我正在轻松地将内容注入到我的控制器中,在某些情况下构建我自己的ResolverServices类.生活很美好.

我无法弄清楚如何做的是让框架自动注入到非控制器类中.框架自动注入我的控制器的工作是什么IOptions,这实际上是我的项目的配置:

public class MessageCenterController : Controller
{
    private readonly MyOptions _options;

    public MessageCenterController(IOptions<MyOptions> options)
    {
        _options = options.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为我可以在我自己的类中发生同样的情况,我认为当我模仿控制器时我会接近,就像这样:

public class MyHelper
{
    private readonly ProfileOptions _options;

    public MyHelper(IOptions<ProfileOptions> options)
    {
        _options = options.Value;
    }

    public bool CheckIt()
    {
        return _options.SomeBoolValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我失败的地方就是我这样称呼它:

public void DoSomething()
{
    var helper = new MyHelper(??????);

    if (helper.CheckIt())
    {
        // Do Something
    }
}
Run Code Online (Sandbox Code Playgroud)

我跟踪它的问题实际上是关于DI的所有内容都是在控制器级别讨论它.我试图找到它在Controller对象源代码中发生的位置,但它在那里变得有点疯狂.

我知道我可以手动创建一个IOptions实例并将其传递给MyHelper构造函数,但似乎我应该能够让框架做到这一点,因为它适用于Controllers.

非常感谢您的帮助.

c# asp.net-core-mvc .net-core asp.net-core

56
推荐指数
3
解决办法
3万
查看次数

Nuget Package ...在项目中不存在...包...已经存在于文件夹中

我一直在与这个错误斗争几个小时,无法找到一个有效的解决方案.

我在一个多项目解决方案中有一个ASP.Net API,它的参考/依赖关系配置不当,我一直试图修复它两天.

问题是(我相信)API缺少System.Web.Http/System.Web.Http.WebHost,它显然包含在Microsoft.AspNet.WebApi.Core中(每多个其他Stack Overflow问题).当试图通过Nuget安装它时,我尝试解决依赖关系时收到以下错误.此外,我每次都遇到此错误(请参阅本问题后面的疑难解答):

Package Manager控制台的屏幕截图

我没有按特定顺序完成以下步骤(各种组合多次):

  • 运行'Update-package Microsoft.AspNet.WebApi.Core -reinstall'
  • 删除解决方案范围的"Packages"文件夹并删除项目的packages.config并尝试还原包
  • 从物理驱动器和TFS中删除整个项目,并从头开始重新创建它(它创建时引用不正确)
  • 通过命令行和Nuget GUI安装软件包
  • 检查解决方案到我硬盘上的不同位置,尝试尽可能新鲜
  • 重新启动计算机/重新启动Visual Studio

在这一点上,只要修复它,我就可以使用非干净的修复程序.API在某一点上工作,但后来我将其检入TFS,创建了一个分支,现在正在分支机构工作.可能有一些依赖项没有被包括在内(?)但是即使是这种情况,似乎我采取的步骤应该可以解决问题.

c# asp.net nuget nuget-package asp.net-web-api

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

ASP.Net intellisense错误地建议路径的webroot

在Pluralsight课程之后,我正在从头开始编写ASP.NET 5/MVC 6 Web应用程序.以以下格式引用对象时:

~/js/site.js
Run Code Online (Sandbox Code Playgroud)

要么

~/css/site.css
Run Code Online (Sandbox Code Playgroud)

在.cshtml文件中,Intellisense显示错误,说无法找到文件,建议路径应该是:

~/wwwroot/js/site.js
~/wwwroot/css/site.css
Run Code Online (Sandbox Code Playgroud)

但是,使用第一组路径在实际网页上正确引用文件,但使用第二组路径,因为Visual Studio建议中断网页,并且不加载js和css.

这些项目位于wwwroot文件夹下,如下所示:

Solution Explorer

为什么Intellisense以这种方式表现,我该如何解决这种行为?

编辑:这是project.json文件:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

    "dependencies": {
        "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
        "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
        "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
        "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final"
    },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc razor asp.net-core-mvc

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

MongoDB C#驱动程序MongoCredential对象

MongoDB驱动程序的文档似乎与从NuGet中提取的实际驱动程序不同.

更具体地说,记录的"MongoCredentials"(复数)不存在,但只有"MongoCredential"(单数).此外,MongoServer.GetDatabase似乎没有接受MongoCredential的构造函数,只有MongoDatabaseSettings(以及命名数据库的字符串),并且我没有看到明显的方式为MongoDatabaseSettings对象提供MongoCredential对象.

我没有在Google上找到我在驱动程序中找到的对象的任何示例,只有那些与(过时的?)官方文档一致的对象.

我正在使用的驱动程序(在NuGet包管理器中)被称为"官方MongoDB C#驱动程序".

总结一下:如何在C#驱动程序中实际提供凭据?

c# mongodb mongodb-.net-driver

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

简单的Injector,依赖于实现相同接口的两个对象

我正在编写一个应用程序(通过ASP.NET Web API公开),其目的是消耗两个数据源,并揭示相似之处和不同之处.因此API具有以下设置:

public class FooController : WebAPI
{
    public FooController(IFooRepository repoFromSourceA, IFooRepository repoFromSourceB)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

保持哪一个来源(SourceA和SourceB不能互换)的区​​别似乎使得container.RegisterCollection(..)不可能(或非常危险)使用.此外,由于一个类正在消耗两个实现,因此Decorator似乎不合适.

那么,我将如何设置此依赖注入?

c# dependency-injection simple-injector asp.net-web-api

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

提供数组属性的数组的 Powershell 导出到 CSV

这段代码:

$concerningMachines = @()
foreach($aMachine in $machineRecords.GetEnumerator())
{
    if($aMachine.Value.ReviewScore -gt $averageAboveAverage)
    {
        $machine = New-Object -TypeName PSObject
        $machine | Add-Member -MemberType NoteProperty -Name MachineName -Value $aMachine.Key
        $machine | Add-Member -MemberType NoteProperty -Name ManagedBy -Value $aMachine.Value.ManagedBy
        $machine | Add-Member -MemberType NoteProperty -Name LastLogin -Value $aMachine.Value.LastLogin
        $machine | Add-Member -MemberType NoteProperty -Name ReviewScore -Value ($aMachine.Value.ReviewScore / $averageAboveAverage * 100)
        $concerningMachines += $machine
    }
}

Export-Csv -InputObject $concerningMachines -Path C:\DG\ConcerningMachines.csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

生成这个 .csv 文件:

“计数”、“长度”、“长长度”、“等级”、“SyncRoot”、“IsReadOnly”、“IsFixedSize”、“IsSynchronized”、“43”、“43”、“43”、“1”、“System.对象[]","假","真","假"

...这是数组的属性,而不是数组的成员。谷歌搜索我发现的唯一建议似乎要么实现了一个完全忽略Export-Csv的解决方案,要么处理字符串(虽然字符集合,但解决方案不适用)或似乎正在做我已经在做的事情,但是生成一个有效的 CSV 文件(如果需要,我可以找到一些链接,但它们是论坛对话,而不是明确的指南)。

如何将 PSObject 数组正确导出为 CSV 文件,并避免上述意外输出?

powershell export-to-csv

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

LINQ to SQL关联未生成

我通过SQL Server创建了一个基本数据库,其中的表由以下代码生成:

CREATE TABLE [dbo].[Characters]
(
    [ID] INT NOT NULL PRIMARY KEY,
    [Name] varchar(MAX) NOT NULL,
    [RefName] varchar(8) NOT NULL
)

CREATE TABLE [dbo].[Players]
(
    [ID] INT NOT NULL PRIMARY KEY,
    [Name] VARCHAR(MAX) NOT NULL,
    [SkypeHandle] VARCHAR(MAX) NOT NULL
)


CREATE TABLE [dbo].[CharacterOwnership]
(
    [CharacterID] int NOT NULL,
    [PlayerID] int NOT NULL, 
    CONSTRAINT [FK_CharacterOwnership_ToCharacters] FOREIGN KEY ([CharacterID]) REFERENCES [Characters]([ID]),
    CONSTRAINT [FK_CharacterOwnership_ToPlayers] FOREIGN KEY ([PlayerID]) REFERENCES [Players]([ID]),
)
Run Code Online (Sandbox Code Playgroud)

将表从Visual Studio 2012中的Server Explorer拖到上方时,生成了下图:

自动生成的ERD

据我所知,我正确设置了主键和外键。

var db = new DBClassesDataContext();
Run Code Online (Sandbox Code Playgroud)

LINQ能够访问每个表以及该表的任何字段而不会出现问题。但是,它不能 …

.net linq database linq-to-sql

2
推荐指数
1
解决办法
490
查看次数

AES 加密 - 添加额外字节的加密/解密

我正在使用框架的对象编写一个用于加密/解密的简单库。方法如下:

public static byte[] Encrypt(byte[] key, byte[] vector, byte[] input)
{
    if(key.Length == 0)
        throw new ArgumentException("Cannot encrypt with empty key");

    if (vector.Length == 0)
        throw new ArgumentException("Cannot encrypt with empty vector");

    if (input.Length == 0)
        throw new ArgumentException("Cannot encrypt empty input");

    var unencryptedBytes = input;

    using(AesCryptoServiceProvider aes = new AesCryptoServiceProvider {Key = key, IV = vector})
    using(ICryptoTransform encryptor = aes.CreateEncryptor())
    using (MemoryStream ms = new MemoryStream())
    using (CryptoStream writer = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
    {
        writer.Write(unencryptedBytes, 0, unencryptedBytes.Length);
        writer.FlushFinalBlock(); …
Run Code Online (Sandbox Code Playgroud)

c# encryption cryptography aes

2
推荐指数
1
解决办法
3186
查看次数

使用ngOnInit()而不是构造函数; @Input()未定义

首先,如果这是一个可怕的设计,我很乐意改变.

在我index.html的身体中,有:

<month [year]="2016" [monthOfYear]="4">Loading...</month>
Run Code Online (Sandbox Code Playgroud)

month.component.ts 那么:

import { Component, Input, OnInit } from '@angular/core';
import { DayComponent } from '../day/day.component';
import * as Models from '../../../models/_models';

@Component({  
  selector: 'month',
  moduleId: module.id,
  templateUrl: 'month.component.html',
  styleUrls: ['month.component.css'],
  directives: [DayComponent]
})

export class MonthComponent {  
  name: string;
  days: Models.Day[];
  @Input('year') year: number;
  @Input('monthOfYear') monthOfYear: number;
  month: Models.Month;

  ngOnInit() {
    this.month = new Models.Month(this.year, this.monthOfYear);
    this.name = this.month.getMonthName();
    this.days = this.month.days;
  }
}
Run Code Online (Sandbox Code Playgroud)

...... ngOnInit()并被正确地称呼.然而,在调用(或许永远,但我不知道如何来确定),两者的时间yearmonthOfYearundefined …

typescript angular2-template angular2-components angular

2
推荐指数
1
解决办法
1314
查看次数

JSON.Net Seralize 值没有引号

以下代码:

var json = JsonConvert.SerializeObject(fooObject,
                                                   new JsonSerializerSettings
                                                       {
                                                           NullValueHandling = NullValueHandling.Ignore,

                                                       });
Run Code Online (Sandbox Code Playgroud)

序列化一个 json(字符串)对象:

{ "fooA":0, "fooB":0, "fooC":false, "fooD":false, "fooE":0, "fooF":0, }

值不在引号中,例如 "fooA":"0"。这是我想要的行为。

有没有办法强制执行这种行为?

.net format json json.net

-2
推荐指数
1
解决办法
6027
查看次数