[英]Dependecy Injection doesn't work with Azure Functions
我在 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
在此先感謝您的幫助
您可以進行以下更改以使其正常工作。 我測試了依賴注入,它奏效了。
將依賴注入從 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; } }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.