现在 ElementReference 上有一个扩展方法,用于将焦点从 razor 组件设置到该元素。太好了。
但是……
我在 DI 中使用 SelectAll 等方法创建了一个 JSInteropService:
public class JSInteropService : IAsyncDisposable
{
private readonly Lazy<Task<IJSObjectReference>> moduleTask;
public JSInteropService(IJSRuntime jsRuntime)
{
moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
"import", "./_content/MyComponentClassLib/mycomponents.js").AsTask());
}
public async ValueTask SelectAll(ElementReference elementReference)
{
var module = await moduleTask.Value;
await module.InvokeVoidAsync("selectAll", elementReference);
}
它工作正常,但这需要 razor 组件注入 JSInteropService,然后对于每个此类功能(如 SalectAll),我调用该服务并引用 ElementReference。例如:
@inject JSInteropService JS
<input @ref=@EditTextBox />
@code {
ElementReference EditTextBox;
async Task SelectAll()
{
await JS.SelectAll(EditTextBox)
}
}
但我想做的是向 ElementReference 添加另一个名为 SelectAll 的扩展方法,目的是我可以替换上面的 SelectAll() 方法并调用:
await EditTextBox.SelectAllAsync()
但是,这需要我的静态扩展类才能获得 JSInteropService。
当我在静态类中没有可用的注入时,是否可以从 DI 容器中提取它?
我的 razor 组件在 Razor 类库中。