c# - 无法解析 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"));
}
解决方案
抛出异常是因为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"));
}