首页 > 解决方案 > 无法解析 Azure 微服务中的类型的服务

问题描述

这是我第一次尝试使用 Azure Service Fabric 和 .Net Core 创建微服务

在调试模式下它工作正常,我可以使用 Postman 访问 API 端点。但是,当我在将 Service Fabric 应用程序发布到 Service Fabric 本地群集(单节点)后尝试访问相同的端点时,它会在下面抛出异常

尝试激活“UrlShortener.WebService.Controllers.UrlShortenerController”时,无法解析“UrlShortener.Services.Contracts.IUrlService”类型的服务

我不确定这里缺少什么。

这是我的代码片段

控制器

 public class UrlShortenerController : ControllerBase
 {
        private readonly IUrlService _urlService;

        public UrlShortenerController(IUrlService urlService)
        {
            _urlService = urlService;
        }
 }

服务

public class UrlService : EntityService<Url>, IUrlService
{
    private readonly IUnitOfWork _unitOfWork;
    private readonly IUrlRepository _repo;
    private readonly IOptions<ShortenUrlConfig> _config;
    public UrlService(IUnitOfWork unitOfWork, IUrlRepository repo, IOptions<ShortenUrlConfig> config)
        : base(unitOfWork, repo)
    {
        _unitOfWork = unitOfWork;
        _repo       = repo;
        _config     = config;
    }

}

服务扩展

public static IServiceCollection RegisterCustomServices(this IServiceCollection services)
        {
            services.AddScoped<IUrlService, UrlService>();

            return services;
        }

        public static IServiceCollection RegisterRepositories(this IServiceCollection services)
        {
            services.AddScoped<IUrlRepository, UrlRepository>();
            return services;
        }

启动.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.RegisterCustomContracts();
            services.RegisterCustomServices();
            services.RegisterRepositories();


            // configure the system messages
            services.Configure<ShortenUrlConfig>(Configuration.GetSection("ShortenUrlConfig"));

            services.AddEntityFramework(Configuration.GetConnectionString("TestDBContext"));
        }

标签: c#azureasp.net-coremicroservicesazure-service-fabric

解决方案


抛出异常是因为urlService未在控制器构造函数中解析UrlShortenerController(IUrlService urlService)

我建议在注册这样的服务后调用services.AddMvc()Method :

public void ConfigureServices(IServiceCollection services)
{
     services.RegisterCustomContracts();
     services.RegisterCustomServices();
     services.RegisterRepositories();
     services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

     // configure the system messages
     services.Configure<ShortenUrlConfig>(Configuration.GetSection("ShortenUrlConfig"));
     services.AddEntityFramework(Configuration.GetConnectionString("TestDBContext"));
}    

推荐阅读