此时我正在轻松地将内容注入到我的控制器中,在某些情况下构建我自己的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.
非常感谢您的帮助.
我一直在与这个错误斗争几个小时,无法找到一个有效的解决方案.
我在一个多项目解决方案中有一个ASP.Net API,它的参考/依赖关系配置不当,我一直试图修复它两天.
问题是(我相信)API缺少System.Web.Http/System.Web.Http.WebHost,它显然包含在Microsoft.AspNet.WebApi.Core中(每多个其他Stack Overflow问题).当试图通过Nuget安装它时,我尝试解决依赖关系时收到以下错误.此外,我每次都遇到此错误(请参阅本问题后面的疑难解答):
我没有按特定顺序完成以下步骤(各种组合多次):
在这一点上,只要修复它,我就可以使用非干净的修复程序.API在某一点上工作,但后来我将其检入TFS,创建了一个分支,现在正在分支机构工作.可能有一些依赖项没有被包括在内(?)但是即使是这种情况,似乎我采取的步骤应该可以解决问题.
在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文件夹下,如下所示:
为什么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) MongoDB驱动程序的文档似乎与从NuGet中提取的实际驱动程序不同.
更具体地说,记录的"MongoCredentials"(复数)不存在,但只有"MongoCredential"(单数).此外,MongoServer.GetDatabase似乎没有接受MongoCredential的构造函数,只有MongoDatabaseSettings(以及命名数据库的字符串),并且我没有看到明显的方式为MongoDatabaseSettings对象提供MongoCredential对象.
我没有在Google上找到我在驱动程序中找到的对象的任何示例,只有那些与(过时的?)官方文档一致的对象.
我正在使用的驱动程序(在NuGet包管理器中)被称为"官方MongoDB C#驱动程序".
总结一下:如何在C#驱动程序中实际提供凭据?
我正在编写一个应用程序(通过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似乎不合适.
那么,我将如何设置此依赖注入?
这段代码:
$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 文件,并避免上述意外输出?
我通过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拖到上方时,生成了下图:

据我所知,我正确设置了主键和外键。
用
var db = new DBClassesDataContext();
Run Code Online (Sandbox Code Playgroud)
LINQ能够访问每个表以及该表的任何字段而不会出现问题。但是,它不能 …
我正在使用框架的对象编写一个用于加密/解密的简单库。方法如下:
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) 首先,如果这是一个可怕的设计,我很乐意改变.
在我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()并被正确地称呼.然而,在调用(或许永远,但我不知道如何来确定),两者的时间year和monthOfYear是undefined …
以下代码:
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"。这是我想要的行为。
有没有办法强制执行这种行为?
c# ×6
.net ×2
asp.net ×2
.net-core ×1
aes ×1
angular ×1
asp.net-core ×1
asp.net-mvc ×1
cryptography ×1
database ×1
encryption ×1
format ×1
json ×1
json.net ×1
linq ×1
linq-to-sql ×1
mongodb ×1
nuget ×1
powershell ×1
razor ×1
typescript ×1