如果我使用Inject
属性并尝试注入未注册的服务,它将给出错误There is no registered service of type X
。
因此,如何在不给出此错误的情况下注入服务,如果没有注入服务,则服务将为空。这个是可能的吗?
例如:
如果没有注册Foo
,这将给我一个错误。
[Inject]
protected Foo Foo { get; set; }
但我希望允许Foo
没有注册,在这种情况下,它将是null
。
发布于 2020-06-09 21:09:48
你能做到的
@inject IServiceProvider ServiceProvider
@code
{
private IMyService MyService;
protected override void OnInitialized()
{
MyService = ServiceProvider.GetService<IMyService>();
base.OnInitialized();
}
}
发布于 2020-06-10 11:11:14
如果您想访问服务器端的数据,这个问题可能是有意义的,但前提是blazor是在服务器端预先录制的( WebAssembly应用程序(ASP.Net Core托管))。
在这种情况下,您可能会在ASP.Net应用程序Startup.cs和Blazor入口点Program.cs中注册服务。
在这种情况下,您可以为您想要访问的功能创建一个接口:
namespace BlazorApp1.Client {
public interface IResponse {
void SetNotFound();
}
}
拥有一个不执行任何操作的接口实例,或者返回可以为Program.cs注册的空结果:
namespace BlazorApp1.Client {
public class ResponseStub : IResponse {
public void SetNotFound() {
// Do nothing if we are browser side
}
}
}
另一个在Setup.cs中执行实例设置的实例:
using BlazorApp1.Client;
using Microsoft.AspNetCore.Http;
using System.Net;
namespace BlazorApp1.Server {
public class Response : IResponse {
private readonly IHttpContextAccessor _httpContextAccessor;
public Response(IHttpContextAccessor accessor) {
_httpContextAccessor = accessor;
}
public void SetNotFound() {
_httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
}
}
}
https://stackoverflow.com/questions/62290742
复制相似问题