WebApi自定义filter与构造函数中的注入接口不会被调用

我的问题陈述与此问题相同,即在属性/filter中使用注入服务。 我已经尝试过BZ给出的解决方案,以下是我给出的解决方案的代码。 //marker attribute public class AuthorizeViewAttribute : Attribute { } //filter public class AuthorizeViewFilter : IAuthorizationFilter { private readonly IAccessRightsService _iAccessRightService; public AuthorizeViewFilter(IAccessRightsService iAccessRightService) { _iAccessRightService = iAccessRightService; } public void OnAuthorization(AuthorizationContext filterContext) { RoleFeature roleFeature = _iAccessRightService.GetRoleFeatures(); if (roleFeature.IsView) { //redirect to controller } } } 以下是我使用的ninject绑定: this.BindFilter(System.Web.Mvc.FilterScope.Controller, 0) .WhenControllerHas(); 我不需要属性中的任何参数,所以我想我不需要使用这个答案中提到的WithConstructorArgument 但我的filter永远不会被调用。 我在AuthorizeViewAttribute中放置了一个默认构造函数,调试后发现控件跳转到AuthorizeViewAttribute中的默认构造函数并继续使用控制器方法。 […]

FileStream和C#中的FileSystemWatcher,奇怪的问题“进程无法访问文件”

我有这个复杂的代码库,它正在侦听某个文件夹上的FileCreated事件。 当文件被创建(其中还包括将文件移动到该文件夹​​)时,我想读取该文件并对其执行某些操作。 它适用于第一个文件,但在所有其他尝试之后抛出exception。 在调试模式下(使用VisualStudio),将抛出错误,但如果我只是单击“继续”…它将工作(没有错误)。 我发布了简化代码,它演示了这个问题。 例如,启动应用程序,单击“开始”按钮,然后“创建新文本文件” 输出是: Working 如果您以完全相同的方式创建2ed文件,则输出为: Broken: The process cannot access the file ‘C:\TestFolder\New Text Document (2).txt’ because it is being used by another process. Working, after breaking 在查看我的代码之后,您将看到上面的打印输出意味着首先抛出了“无法访问文件”exception,但是在catch语句中执行相同的调用突然起作用。 这对我来说没有任何意义,因为该文件显然没有被其他任何东西使用(我刚刚创建它)..并且无论如何它会在一秒后工作…. 以下是我的代码 XAML: 代码背后: using System; using System.Diagnostics; using System.IO; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace WpfApplication1 { public partial […]

如何在打开的xml文档上保留样式

我使用开放XML(Microsoft Word – .docx)作为文件模板来自动生成其他文档。 在模板文档中,我定义了内容控件,并且我编写了代码来替换这些内容控件中的内容。 内容被替换并生成文档,但我正在努力保持风格。 在Word中,当检查内容控件的属性时,我检查了checbox“使用样式将文本格式化为空控件:样式”,并检查“在编辑内容时删除内容控件”。 当代码生成文档时,这似乎没有任何影响。 这是我的代码(这里的社区成员非常友好地帮助)来替换内容控件中的数据。 任何想法,我应该做什么,以保持格式? 格式化是简单的文本格式,如大小和字体。 请指教: private static void ReplaceTags(MainDocumentPart mainPart, string tagName, string tagValue) { //grab all the tag fields var tagFields = mainPart.Document.Body.Descendants().Where (r => r.SdtProperties.GetFirstChild().Val == tagName); foreach (var field in tagFields) { //remove all paragraphs from the content block field.SdtContentBlock.RemoveAllChildren(); //create a new paragraph containing […]

一次运行不同的表单

我试图同时显示2种不同的表格。 我尝试了以下代码,但它不起作用: Form1 t1 = new Form1(); Form2 t2 = new Form2(); t2.Show(); t1.Show(); Application.Run(); 我还尝试从program.cs运行第一个,从Form1_Load运行另一个: private void Form1_Load(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); } 这也不起作用。 我究竟做错了什么? 如何同时运行多个表单?

使用WPF和MVVM模式将值从子窗口传递到父窗口

我有父窗口,其中包含名为“SchoolName”的textBox和一个名为“Lookup school Name”的按钮。 该按钮打开一个包含学校名称列表的子窗口。 现在,当用户从子窗口中选择学校名称,并单击“使用所选学校”按钮。 我需要在父视图的文本框中填充选定的学校。 注意:我已采用Sam和其他人的建议来使这段代码有效。 我更新了我的代码,以便其他人可以简单地使用它。 SelectSchoolView.xaml(父窗口) SchoolNameLookup.xaml(查找学校名称的子窗口) SchoolNameLookupViewModel private string _schoolNames; public string SchoolNames { get { return _schoolNames; } set { _schoolNames= value; OnPropertyChanged(SchoolNames); } } private ICommand _useSelectedSchoolNameCommand; public ICommand UseSelectedSchoolNameCommand{ get { if (_useSelectedSchoolNameCommand== null) _useSelectedSchoolNameCommand= new RelayCommand(a => DoUseSelectedSchollNameItem(), p => true); return _useSelectedSchoolNameCommand; } set { _useSelectedSchoolNameCommand= […]

如何更改所有月份所有工作日的颜色属性

if(e.Day.Date.DayOfWeek == DayOfWeek.Monday) { e.cell.BackColor=System.Drwaing.Color.Red; } 我正在尝试这个代码,但它只更改单个月的属性,我想在一年中的所有月份更改所有DayOfweek。

为什么C#垃圾收集行为对于Release和Debug可执行文件有所不同?

让我们考虑以下简单程序: class Program { class TestClass { ~TestClass() { Console.WriteLine(“~TestClass()”); } } static void Main(string[] args) { WeakReference weakRef; { var obj = new TestClass(); weakRef = new WeakReference(obj); Console.WriteLine(“Leaving the block”); } Console.WriteLine(“GC.Collect()”); GC.Collect(); System.Threading.Thread.Sleep(1000); Console.WriteLine(“weakRef.IsAlive == {0}”, weakRef.IsAlive); Console.WriteLine(“Leaving the program”); } } 在Release模式下构建时,可预测打印: Leaving the block GC.Collect() ~TestClass() weakRef.IsAlive == False Leaving […]

如何强制我想要的任何显示分辨率/时间?

我无法找到一种方法来强制我想要在我的C#程序中显示任何显示分辨率/时间。 我正在运行带有GeForce 210显卡的Windows 7。 我目前实现这些自定义分辨率的方法是使用驱动程序GUI手动添加自定义分辨率,然后使用Windows调用更改为这些分辨率,但我需要一种实时添加新自定义分辨率的方法。 我已经研究过NVAPI,但我找不到办法做到这一点。 我也查看了图形驱动程序的命令行工具,但我无法让它工作。 我最后的办法是重写注册表中的值,但我真的想避免这种情况。 我愿意使用不同的编程语言或第三方工具,只要我可以通过我的程序从命令行调用它。 谁能指出我正确的方向? 提前致谢。 更新(2011年8月16日):我一直在与NVIDIA一起解决这个问题,他们正在为我提供一个高级NVAPI,这将允许我重新创建其驱动程序的function。 他们还证实,他们提供的NVAPI的基本版本不会这样做。

如何将存储在HSM中的私钥转换为C#中的SignedXml.SigningKey

我正在尝试使用存储在HSM中的证书来实现XML签名的一些演示。 我在这个链接中找到了一个有趣的例子: 使用X509Certificate2签署XML文档并使用PKCS11Interop包装器将其修改为使用HSM内部的证书和密钥。 但任何人都可以给我一个建议或示例, 将ObjectHandle privateKey从HSM转换为SignedXML.SigningKey private static void SignXmlWithCertificate(XmlDocument xmlDoc, X509Certificate2 cert, Session session, String alias) { SignedXml signedXml = new SignedXml(xmlDoc); List template = new List(); template.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY)); template.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_RSA)); template.Add(new ObjectAttribute(CKA.CKA_LABEL, alias)); List foundObjects = session.FindAllObjects(template); ObjectHandle privateKey = foundObjects[0]; signedXml.SigningKey = privateKey; //Here is where I stuck. 在上面的外部链接示例中。 他们使用组合私钥的证书。 […]

ServiceStack – validation和数据库访问

我正在使用ServiceStack实现Api。 我的解决方案的一个关键方面是积极的validation策略。 我使用ServiceStack的ValidationFeature,这意味着如果在应用程序容器中注册了IValidator (或其后代:AbstractValidator ),validation将在服务之前自动运行。 通过积极validation,我的意思是我检查所有可能的错误情况,以及validation器级别的逻辑validation。 因此,我的服务逻辑非常简洁。 从实际的角度来看,服务validation的服务逻辑的这种独立性是非常好的,因为它提供了非常容易阅读和推理服务逻辑/实现。 但是,我开始认为FluentValidation的规则和规则集更适合简单的格式validation,而不是直接在我正在进行的数据库访问(主要是测试源自请求中提取的ID的404错误)。 问题: 1:validation逻辑在概念上是否存在访问数据库的错误? 2:从我到目前为止看到的,包括SS源代码,我没有找到一个表单来定义FluentValidation规则,例如:从请求中提取Id,访问数据库检索实体,如果是,则抛出404没有找到进入。 我只使用FV规则来定义基本格式validation,例如: RuleFor(x => x.UserName).NotEmpty(); RuleFor(x => x.Password).NotEmpty(); 其余的我手动做。 有解决这个问题的人吗? 注意:这不是关于如何将ValidationResult / ValidationError转换为HttpResult / HttpError的问题。 我已经介绍过,使用了SS 3.9.44中引入的ValidationFeature的ErrorResponseFilter。 谢谢