我请求审核的代码是使用SKStoreReviewController
,它在 iOS 18.0 中已过时。新指南告诉我使用,RequestReviewAction
但我不知道如何访问它,因为它使用了一个我不知道的奇怪的 SwiftUI 符号。询问 AI 也没有帮助,尽管它似乎与注入有关。
我如何将此代码翻译成 MAUI C#?
@Environment(\.requestReview) private var requestReview
我请求审核的代码是使用SKStoreReviewController
,它在 iOS 18.0 中已过时。新指南告诉我使用,RequestReviewAction
但我不知道如何访问它,因为它使用了一个我不知道的奇怪的 SwiftUI 符号。询问 AI 也没有帮助,尽管它似乎与注入有关。
我如何将此代码翻译成 MAUI C#?
@Environment(\.requestReview) private var requestReview
假设我有此服务注册:
services.AddScoped<IFoo, Foo>();
我知道你可以“替换 ASP.NET Core 内置 DI 容器中的服务注册? ”但是是否可以替换它但仍然保持前一个实例完好无损?
services.AddScoped<IFoo>(sp => new MyFooWrapper(/* I need the original Foo here */));
当我执行单元测试时,这将很有帮助,我可以决定是否要替换例如外部 API 调用:
public class MyFooWrapper(IFoo wrapped) : IFoo
{
public void DoSomething()
{
if (TestingWithExternal)
{
wrapped.DoSomething(); // Original method that calls external HTTP API
}
else
{
FakeSomething();
}
}
}
另一个用例是我想要包装 Blazor,IJSRuntime
因为 MS 使得改变其行为变得非常困难,internal
并且如果他们更新它,重新实现一切就会非常困难。
感谢答案,这是可以替换多个服务的代码
// Replace with fakes
foreach (var s in services.ToList())
{
// Other logic
if (s.ServiceType == typeof(IOaApiService))
{
services.Remove(s);
var implType = s.ImplementationType;
ArgumentNullException.ThrowIfNull(implType);
services.Add(new(implType, implType, s.Lifetime));
services.Add(new(
s.ServiceType,
sp => new FakeOaAiService((IOaApiService)sp.GetRequiredService(implType)),
s.Lifetime));
}
}
问题:假设我有一个Orders
带有索引的表,如果我只想列出单个用户的订单,那么添加(UserId, CreatedTime)
是否重要?DESC
CreatedTime
例如:
SELECT *
FROM Orders -- Also potentially have row limit
WHERE UserId = @UserId
ORDER BY CreatedTime DESC;
我不明白的是,如果答案是肯定的,那么为什么 DB 不能简单地从底部开始向上移动,因为它已经知道了范围@UserId
?
另外,我同时使用 SQL Server 和 SQLite,因此我很想知道每个 DBMS 的答案是否不同。
我仍然不太了解SQL Server 索引 - 升序或降序,有什么区别?显然在 MongoDB 中,这并不重要(MongoDB 中的索引顺序重要吗?)。
回到上面的查询,即使我按降序列出所有用户及其相应的顺序CreatedTime
,为什么数据库不能这样做:
我甚至问过 AI,它只是告诉我从下往上获取速度较慢,没有进一步解释,即使我试图按下它。
我有一个<input type="number" step="1">
用于选择字体大小的元素。但是,考虑到在大型画布上绘图的上下文,将数字更改 1 几乎不会引人注意。如果用户每次单击箭头时都可以将数字增加或减少 5 或 10,那么对用户来说会更方便。
我仍然需要将step
属性保持在 1,因为即使使用细粒度值,输入也应该保持有效。有没有办法实现这种行为,比如下面的(伪)jump
属性。我也愿意接受 Javascript 解决方案,但据我所知,当用户单击箭头时没有这样的事件。
<input type="number" min="1" max="1000" step="1" jump="5" value="100" />
我有一个像这样的简单类,它实现了IDisposable
,所以它被CA1816 击中:正确调用 GC.SuppressFinalize:
public class A : IDisposable
{
// ...
int foo
public A()
{
SomeObj.SomeEvent += DoSomething;
}
public void Dispose()
{
SomeObj.SomeEvent -= DoSomething;
}
}
更改 A.Dispose() 以调用 GC.SuppressFinalize(object)。这将防止引入终结器的派生类型需要重新实现“IDisposable”来调用它。
现在我已经读过这个、这个和这个,但我仍然不明白那到底是什么(更多解释如下)。所以我的问题是:
如果我不明白它是什么,我是否应该总是添加GC.SuppressFinalize(object)
到我的方法中?Dispose
我什么时候不应该这样做而只是抑制警告?
添加更多上下文:我仍然不明白在SuppressFinalize
做什么。我知道我已经在(示例中的事件处理程序或资源等)中处置了一些资源,但是仍然需要清理类似的变量呢?那么“这将阻止引入终结器的派生类型需要重新实现”的警告部分又如何呢?Dispose
IDisposable
int foo
在已启用的TypeScript 中strict
(TypeScript Playground):
type Foo = { a: number; b: number; }
class Bar {
#a?: Foo;
bar() {
const a = this.#a?.a;
if (!a) {return;}
// Error: Object is possibly 'undefined'.
const b = this.#a.b;
}
bar2() {
const obj = this.#getFoo();
const a = obj?.a;
if (!a) {return;}
// No error:
const b = obj.b;
console.log(b);
}
#getFoo() : Foo | undefined {
return undefined;
}
}
为什么TS理解正确的是bar2()
不可能;但不是在?我缺少逻辑案例吗?obj.b
undefined
this.#a.b
bar()
在 中bar()
,如果我分配const tmp = this.#a
它也能成功编译。
更新:显然它与变量的可变性有关。如果我使用,错误也会let obj = this.#getFoo()
出现。obj
我有以下代码MyLib.dll
:
[Obsolete("This method is for debugging only. Remove all calls to this method once done.")]
public void SetLaunchCount(int count)
{
ThrowOnReleaseBuild();
launchEntry.Set(count);
}
[Conditional("RELEASE")]
static void ThrowOnReleaseBuild()
{
throw new InvalidOperationException("This method must not be called outside of DEBUG build"); ;
}
当我在同一解决方案中使用项目(在我的例子中为 MAUI)测试它时,它工作得很好。然而,当打包它并将其上传到 Nuget(通过我们的私有 Github Nuget feed)时,调用SetLaunchCount
总是抛出并且堆栈跟踪显示对ThrowOnReleaseBuild
.
我已经仔细检查过,调试版本确实有DEBUG
符号(更准确地说,没有RELEASE
符号):
我还尝试添加另一种Debug.WriteLine
方法来确认:
为什么它不起作用?Debug.WriteLine
我检查了例如(反编译的)源代码,它的编码就像我的方法一样:
[Conditional("DEBUG")]
public static void WriteLine(string? message) =>
s_provider.WriteLine(message);
编辑:添加更多信息:
该库是在发布配置文件中构建的。
请参阅我之前有关使用的问题的答案Conditional
。不知怎的,现在不起作用了。