此时我正在轻松地将内容注入到我的控制器中,在某些情况下构建我自己的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.
非常感谢您的帮助.
我在两个我认为是等效的语句之间得到了不同的响应: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)