小编cam*_*ase的帖子

将ActionFilter.OnActionExecuting()中的对象传递给ApiController

我希望在ActionFilter中为每个http请求创建一个对象,并将此对象传递给控制器​​.到目前为止,我已经尝试了Request.Properties [],如下所示

public class DbReadonlyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        actionContext.Request.Properties["CustomObjectKey"] = new MyClass();
Run Code Online (Sandbox Code Playgroud)

我还尝试将新对象直接分配给ControllerBase类.

public class DbReadonlyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var controller = (MyControllerBase) actionContext.ControllerContext.Controller;
        controller.StorageContextFactory = new MyClass();
Run Code Online (Sandbox Code Playgroud)

问题是这两种技术都没有将MyClass的实例传递给控制器​​,因为在调用控制器方法时,新的Property ["CustomObjectKey"]在Webapi管道中丢失了.

在调用操作过滤器OnActionExecuting()之后,控制器由webapi管道重新实例化.

断点确认Webapi管道在单个http请求期间调度以下事件流.

  • 构造函数MyControllerBase()
  • MyAuthenticationFilter
  • 过滤OnActionExecuting()
  • 构造函数MyControllerBase()
  • MyController.MethodA()

MyControler的双实例化是奇怪的,但是现在我正在寻找任何技术将新创建的对象从动作过滤器传递给控制器​​.

编辑1:此问题的v1中提到的MyAuthorizationFilter实际上是一个身份验证过滤器.还在调查.

解决方案:该错误在另一个过滤器中.删除我的身份验证过滤器后,此问题中报告的问题就消失了.

action-filter asp.net-web-api

12
推荐指数
1
解决办法
9882
查看次数

从Azure中的WebJob访问SQL数据库

我打算使用WebJobs作为NServiceBus的轻量级替代品,但是想要首先验证可以从触发的WebJob处理程序中进行例行SQL Azure数据库查询吗?我的数据库访问将通过EntityFrameworks.

这个SO线程表明WebJobs不支持SQL数据库,但我希望这只是意味着SQL数据库不能用作WebJob处理程序的触发机制?

Azure Web作业 - 如何连接到Azure MS SQL数据库?

我没有找到发布SQL数据库查询的WebJob示例,但由于WebJob可以访问与主WebSite相同的应用程序配置,我假设可以使用数据库连接详细信息?

azure-webjobs azure-sql-database

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

C# v10 全局 using 声明的文件名约定

C# 开发社区对于声明全局 using 语句的 .cs 文件名是否达成共识?

我本来打算采用文件名 GlobalUsings.cs,但随后发现 VS2022 工具链在幕后创建了一个名为 MyProject.GlobalUsings.g.cs 的隐藏文件。这是为了支持称为隐式全局 using 指令的相关新 C# 10 功能。

Blazor 支持 .razor 文件的类似功能,并且 Blazor 解决方案模板会自动创建一个名为 _Imports.razor 的文件。该名称源自 Razor 语法,用于声明 using 引用。

using-directives naming-conventions c#-10.0

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

遗传算法框架中的随机化不良

有没有人从.Net 遗传算法框架中看到令人信服的结果?

我发现随遗传算法框架提供的旅行商问题演示中的随机化很差.以下调用在x 100种子染色体群体中生成相同的基因shuffle顺序:

chromosome.Genes.ShuffleFast();
Run Code Online (Sandbox Code Playgroud)

如果我单步执行代码,基因顺序看起来是随机的,因此我怀疑在ShuffleFast()中有一个时间/ Rdn()错误,否则我忽略了一个设置步骤.

我试图通过预先填充染色体基因序列来解决这个问题,这在TSP结果中产生了微小的变化.然而,该运行的控制台日志仍然显示GAF在400个人口世代中仅发现了4个潜在的解决方案.这与GA YouTube视频不一致,这些视频显示遗传算法的实现正在寻找具有大量抖动的建议解决方案.我引用这一点作为进一步表明GAF存在随机数生成的系统性内部问题.

遗传算法框架通过作者博客得到很好的记录,所以我试图保持开放的心态作为原因.

重现步骤=从nuget下载GAF,在创建染色体for循环后使用断点编译和调试默认项目,检查population.Solutions.Windows 7,VS2015,.Net 4.5和4.61.调试或发布.

c# genetic-programming genetic-algorithm

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

使用LightInject和Nsu​​bstitute进行自动锁定,如何实现?

我是两个库的新手,在承诺在大型项目中使用它之前,我需要澄清我的单元测试中的低代码工作量自动插件的选项.

在Google上花了一些时间之后我得出结论,与其他一些IOC/Mocking产品配对不同,LightInject + Nsubstitute没有现成的插件库来简化单元安排阶段无操作默认模拟的声明测试.

我已经阅读了关于如何使用临时增强型模拟对象覆盖LightInject容器的LightInject文档,仅用于单元测试的范围,但是单元测试可能触及的所有无操作默认隔离模拟如何.有没有办法在LightInject容器中自动创建它们?

我正在寻找的内部IOC容器行为是:

public class LightInject.ServiceContainer
{
..

  public T GetInstance<T)
  {
     if (( this.RegisteredInterfaces.Any( i => i.Itype == T ) == false )
     && ( this.TemporaryUnitTestOverrides.Any( i => i.Itype == T ) == false ))
     && ( /* this container is configured with an automocking delegate */ ))
          return autoMockCreatorDelegate<T>.Invoke();
  }
Run Code Online (Sandbox Code Playgroud)

看起来LightInject的IProxy和Interceptors提供了一些内部模拟对象构建块,但是Nsubstitute库是完整的功能.

澄清我的意思默认不做任何模拟和增强模拟.

   // default do nothing mock
   var calculator = Substitute.For<ICalculator>();

   // Enhanced mock that will return 3 for .Add(1,2)
   var calculator …
Run Code Online (Sandbox Code Playgroud)

ioc-container automocking nsubstitute light-inject

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

服务器端虚拟 DOM,Blazor 中的会话状态开销是多少?

在投入 Blazor Server 项目之前,我需要了解 Razor-Components 架构强加了哪些额外的服务器会话状态存储。我知道虚拟 DOM 是 Blazor 工作方式的基本元素,并且虚拟 DOM 可能是一个合理的概念,例如它是 ReactJS 的基本元素。

我担心的是,当所有 Blazor 都在服务器端运行时,虚拟 dom 也必须托管在服务器端,以便 Blazor 框架将 html delta 命令分派到客户端浏览器。

我有兴趣了解对于一个不平凡的 SPA 应用程序每个客户端连接的虚拟 dom 的可能大小的任何估计。

作为比较,在设计常规 .NET Webapi 应用程序时,我尝试将用户会话状态的大小保持在远低于 1k 的大小。

session-state overhead blazor-server-side

5
推荐指数
0
解决办法
306
查看次数

在执行之前传递lambda表达式的方法参数类型

我试图将一些基于接口的抽象改进为遗留代码,作为依赖注入的初步步骤.遗留代码包含我正在努力封装的lambda用法.这是现有的lambda用法:

private void MethodAaa(EntityA a, EntityB a, int someInt) {...}

private void MethodBbb(DateTime date, EntityA e) {...}


_commandObjectFromThirdPartyLibrary.Execute(() => MethodAaa(a, b, c));

_commandObjectFromThirdPartyLibrary.Execute(() => MethodBbb(d, e));
Run Code Online (Sandbox Code Playgroud)

我希望通过公共基类方法路由lamda执行,如下所示:

base.CommonExecute( () => MethodAaa(a, b, c) );
base.CommonExecute( () => MethodBbb(d, e) );

base.CommonExecute( Action<???> lamdaExpression )
{
    _commandObjectFromThirdPartyLibrary.Execute( lamdaExpression );
}
Run Code Online (Sandbox Code Playgroud)

有人可以提供一个如何正确声明base.CommonExecute(?)的示例吗?

c# lambda

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

LINQ查询将结果分组为数组

鉴于:

var detailList = new List<DetailItem>();
Run Code Online (Sandbox Code Playgroud)

哪里:

class DetailItem
{
    string A;
    MyType B;
}
Run Code Online (Sandbox Code Playgroud)

可以将字段A上的LINQ查询组转换为以下数据结构:

class GroupItem
{
    string A;
    List<MyType> AllBsWithinA;
}



IEnumerable<GroupItem> linqQuery = detailList.SomeLinqMagic(…);
Run Code Online (Sandbox Code Playgroud)

有问题的数据都是基于内存的,因此这是一个LINQ to Objects问题.

c# linq linq-to-objects group-by

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