我在 Azure Functions 中遇到了依賴注入問題。我在 stackoverflow 上閱讀了所有指南和任何問題,但找不到解決方案。
我正在使用 Visual Studio 2019 和 Azurite 在我的本地機器上進行測驗。我嘗試在沒有的情況下制作一個專案,并且效果很好。該專案是一個帶有 HttpTrigger 的 Azure Functions。
這是 我的github存盤庫的鏈接
我在這里粘貼我的啟動代碼:
[assembly: FunctionsStartup(typeof(Startup))]
namespace ZanettiClod.SampleAzureFunctions
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
builder.Services.AddSingleton<IProductService, ProductService>();
builder.Services.AddSingleton<IProductRepository<Product>, ProductRepository>();
}
}
}
還有我的程式代碼:
namespace ZanettiClod.SampleAzureFunctions
{
public class Program
{
public static void Main()
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
}
}
}
我的 GetProducts 代碼:
namespace ZanettiClod.SampleAzureFunctions
{
public class GetProducts
{
private readonly IProductService _productService;
public GetProducts(IProductService productService)
{
_productService = productService;
}
[Function("GetProducts")]
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")]
HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("GetProducts");
logger.LogInformation("C# HTTP trigger function processed a request.");
var products = await _productService.GetAllProducts();
var response = req.CreateResponse(HttpStatusCode.OK);
await response.WriteAsJsonAsync(products);
return response;
}
}
}
這是我回傳的錯誤: screeshot
在此先感謝您的幫助
uj5u.com熱心網友回復:
您可以進行以下更改以使其正常作業。我測驗了依賴注入,它奏效了。
將依賴注入從 startup.cs 移到 program.cs。這就是目標框架 .Net 5.0 的作業原理。檔案 - https://docs.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide
namespace ZanettiClod.SampleAzureFunctions { public class Program { public static void Main() { var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureServices(s => { s.AddHttpClient(); s.AddSingleton<IProductService, ProductService>(); s.AddSingleton<IProductRepository<Product>, ProductRepository>(); }) .Build(); host.Run(); } } }在 CreateProduct 類中將 _productService 的限定符從靜態更改為只讀。依賴注入不適用于靜態成員變數。還要從您的函式中洗掉靜態限定符。
public class CreateProduct { private readonly IProductService _productService; public CreateProduct(IProductService productService) { _productService = productService; } [Function("CreateProduct")] public async Task<HttpResponseData> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req, FunctionContext executionContext) { var logger = executionContext.GetLogger("CreateProduct"); logger.LogInformation("C# HTTP trigger function processed a request."); var product = await req.ReadFromJsonAsync<Product>(); _productService.CreateProduct(product); var response = req.CreateResponse(HttpStatusCode.OK); await response.WriteAsJsonAsync( new { Result = true, Message = $"Name: {product.Name}, Price: {product.Price}" }); return response; } }}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/340707.html
下一篇:計數和搜索字串
