小编Rob*_*sen的帖子

使用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万
查看次数

NOT EXISTS和COUNT(*)之间的区别

我在两个我认为是等效的语句之间得到了不同的响应:SELECT COUNT(*)vs NOT EXISTS。在50个执行中,有约49个执行这两个语句的行为相同,但有时却不相同。

我的猜测是这些语句如何处理锁定的页面或其他更“遥不可及”的方法之间存在差异。我的问题是那有什么区别?

我最初在SPROC中添加了一些日志记录(语句3),这就是我看到它们具有不同值的方式。由于在TableWithResults执行此SPROC 时can 的内容可以更改,因此我添加了STATEMENT#3,以便可以确认COUNT(*)之前和之后的结果NOT EXISTS

-- STATEMENT 1: If this is returning 1...
SET @MatchingResultCount1 = ( SELECT COUNT (*) FROM TableWithResults  WHERE  SearchId = @SearchId ) 

-- STATEMENT 2: ...I expect this to evaluate "False" and sets IS_VALID='Y'
IF NOT EXISTS ( SELECT * FROM TableWithResults WHERE  SearchId = @SearchId )
   SET @IS_VALID = 'N';
ELSE
   SET @IS_VALID = 'Y';

-- STATEMENT 3: This is to …
Run Code Online (Sandbox Code Playgroud)

sql-server

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