首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有在服务存在的情况下,我才能将服务注入blazor中?

只有在服务存在的情况下,我才能将服务注入blazor中?
EN

Stack Overflow用户
提问于 2020-06-09 19:51:04
回答 2查看 1K关注 0票数 4

如果我使用Inject属性并尝试注入未注册的服务,它将给出错误There is no registered service of type X

因此,如何在不给出此错误的情况下注入服务,如果没有注入服务,则服务将为空。这个是可能的吗?

例如:

如果没有注册Foo,这将给我一个错误。

代码语言:javascript
运行
复制
[Inject]
protected Foo Foo { get; set; }

但我希望允许Foo没有注册,在这种情况下,它将是null

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-09 21:09:48

你能做到的

代码语言:javascript
运行
复制
@inject IServiceProvider ServiceProvider

@code
{
  private IMyService MyService;

  protected override void OnInitialized()
  {
    MyService = ServiceProvider.GetService<IMyService>();
    base.OnInitialized();
  }
}
票数 6
EN

Stack Overflow用户

发布于 2020-06-10 11:11:14

如果您想访问服务器端的数据,这个问题可能是有意义的,但前提是blazor是在服务器端预先录制的( WebAssembly应用程序(ASP.Net Core托管))。

在这种情况下,您可能会在ASP.Net应用程序Startup.cs和Blazor入口点Program.cs中注册服务。

在这种情况下,您可以为您想要访问的功能创建一个接口:

代码语言:javascript
运行
复制
namespace BlazorApp1.Client {
    public interface IResponse {
        void SetNotFound();
    }
}

拥有一个不执行任何操作的接口实例,或者返回可以为Program.cs注册的空结果:

代码语言:javascript
运行
复制
namespace BlazorApp1.Client {
    public class ResponseStub : IResponse {
        public void SetNotFound() {
            // Do nothing if we are browser side
        }
    }
}

另一个在Setup.cs中执行实例设置的实例:

代码语言:javascript
运行
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62290742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档