Sam*_*Sam 33 asp.net azure asp.net-web-api azure-functions
我有一些类库,我在ASP.NET Web API应用程序中使用它来处理我的所有后端内容,例如对多个数据库(如Azure SQL数据库,Cosmos DB等)的CRUD操作.
我不想重新发明轮子,并且能够在我在Visual Studio 2017中创建的新Azure功能中使用它们.我的所有存储库方法都使用接口.那么,我将如何在我的新Azure功能中实现依赖注入?
我没有看到对DI的任何支持,但我有点困惑.似乎Azure Functions基于与WebJobs相同的SDK,我认为去年微软已经开始在WebJobs中支持DI - 我当然知道,因为我使用Ninject实现了它.
有没有解决方法,以便我可以在我的新Azure功能项目中使用我现有的库?
Sam*_*Sam 25
除了服务定位器(反)模式之外,我还看到了这两种技术.我也向Azure Functions团队询问了他们的意见.
https://blog.wille-zone.de/post/azure-functions-dependency-injection/
https://blog.wille-zone.de/post/azure-functions-proper-dependency-injection/
Azure功能的GitHub页面上有一个关于此事的开放功能请求.
但是,我接近这个的方式是使用某种"包装器"入口点,使用服务定位器解决此问题并从那里启动该功能.
看起来有点像这样(简化)
var builder = new ContainerBuilder();
//register my types
var container = builder.Build();
using(var scope = container.BeginLifetimeScope())
{
var functionLogic = scope.Resolve<IMyFunctionLogic>();
functionLogic.Execute();
}
Run Code Online (Sandbox Code Playgroud)
当然这有点笨拙,但它是最好的,直到现在(据我所知).
小智 5
我已经看到Willie-zone博客提到了很多有关该主题的文章,但是您无需走这条路就可以将DI与Azure函数一起使用。
如果使用的是Version2,则可以使Azure函数处于非静态状态。然后,您可以添加一个公共构造函数以注入依赖项。下一步是添加IWebJobsStartup类。在启动课程中,您将可以像注册其他任何.Net Core项目一样注册服务。
我有一个公共仓库在这里使用这种方法:https : //github.com/jedi91/MovieSearch/tree/master/MovieSearch
这是启动类的直接链接:https : //github.com/jedi91/MovieSearch/blob/master/MovieSearch/Startup.cs
这是函数:https : //github.com/jedi91/MovieSearch/blob/master/MovieSearch/Functions/Search.cs
希望这种方法有帮助。如果要使Azure Functions保持静态,则可以使用willie-zone方法,但是我真的很喜欢这种方法,它不需要任何第三方库。
要注意的一件事是Directory.Build.target文件。该文件将扩展扩展复制到主机文件中,以便将功能部署到Azure后DI即可工作。在本地运行该功能不需要此文件。
Azure Functions 依赖注入已在 MSBuild 2019 上发布。以下是有关如何执行此操作的示例:
[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>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14374 次 |
最近记录: |