Azure Functions V2 现在支持.net 依赖注入
为了实现这一点,您需要执行以下代码:
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
builder.Services.AddSingleton((s) => {
return new CosmosClient(Environment.GetEnvironmentVariable("COSMOSDB_CONNECTIONSTRING"));
});
builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();
}
}
}
我想将默认容器从 .net 更改为“Lamar”DI 框架。
var builder = new WebHostBuilder();
builder
// Replaces the built in DI container
// with Lamar
.UseLamar()
// Normal ASP.Net Core bootstrapping
.UseUrls("http://localhost:5002")
.UseKestrel()
.UseStartup<Startup>();
builder.Start();
但我无法将 IFunctionsHostBuilder 更改为使用“UseLamar()”扩展名。因为这扩展了 IWebHostBuilder。我能够拦截天蓝色函数初始化的唯一方法是使用配置 IFunctionsHostBuilder 的FunctionsStartup或配置 IWebJobsBuilder 的IWebJobsStartup ,但我在 Lamar 上找不到此类构建的扩展。
我试图检查现有的扩展来创建类似的代码,但没有工作,因为可能我需要创建更多的东西:
[assembly: FunctionsStartup(typeof(FunctionAppPrototype.Startup))]
namespace FunctionAppPrototype
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var container = new Container(x =>
{
x.AddTransient<IMyService, MyService>();
});
builder.Services.AddSingleton<IServiceProviderFactory<IServiceCollection>, LamarServiceProviderFactory>();
builder.Services.AddSingleton<IServiceProviderFactory<ServiceRegistry>, LamarServiceProviderFactory>();
}
}
}