设置一个引用其他网络标准项目的 Azure 函数,这些项目又引用 Microsoft.Extensions.Logging。
当函数在本地运行时,没有任何对其他项目的引用,一切开始都很好。但是,一旦我添加了对其他项目之一的引用,我就会在启动时收到以下异常:
TestTrigger: Microsoft.Azure.WebJobs.Host: Error indexing method 'TestTrigger'.Microsoft.Azure.WebJobs.Host:无法绑定参数'log'以键入ILogger。确保绑定支持参数 Type。如果使用的是绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保已在启动代码(例如生成器)中调用了扩展的注册方法。AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() 等)。
这是我为计时器功能准备的初始代码
public class TestTrigger
{
private ITester _tester;
public TestTrigger(ITester tester)
{
_tester = tester;
}
[FunctionName("TestTrigger")]
public void Run([TimerTrigger("* * * * * *")] TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.UtcNow}");
_tester?.TestMethod().Wait();
}
}
我在以下Startup类中注入了依赖项
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var cfgBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.dev.json", true, true)
.AddEnvironmentVariables();
var configuration = cfgBuilder.Build();
builder.Services
.AddSingleton<ITester, Tester>()
.AddLogging()
.AddOptions();
}
}
实现ITester的自定义类是netstandard 2.0项目的一部分。扩展.日志.抽象3 . 0 . 0 . 0 nu获取包。functions项目本身是一个netcoreapp2.1项目,它也引用了相同的nuget包,以及Microsoft。函数1.0.29,微软。azure . functions . extensions 1 . 0 . 0和微软。NETCore.App 2.1.0包。
作为参考,csproj文件:
功能项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<AzureFunctionsVersion></AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.29" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\TestLibrary\TestLibrary.csproj" />
</ItemGroup>
</Project>
引用的项目:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0" />
</ItemGroup>
</Project>
我很确定这是参考问题,但不能把我的手放在它上面。有什么帮助吗?
复制了您的错误:
似乎错误来自参考项目。
解决方案:
正在降级< code>Microsoft的版本。2.2.0的扩展. logging . abstracts 。
原因:
绑定引擎不会将您的参数识别为相同的类型,因为它们来自不同的程序集。
我使用 .NET 5 创建了一个 Azure 函数版本 3,并通过类的构造函数进行依赖关系注入。请参阅下面的虚拟代码: 在类中添加了范围。 程序文件如下所示: 在文件中有这行代码: 问题是当我想运行 Azure 函数时。我有这个警告: 未找到作业函数。试着公开你的作业类和方法。如果您使用的是绑定扩展(例如Azure存储、ServiceBus、定时器等),请确保您在启动代码中调用了扩展的注册方法(例
我有一个时间触发的Azure功能
我有一个关于 azure 函数 v1 中的依赖注入的新问题。 实际情况: 我有一个azure函数V1,我想在其中引用我的业务服务,而无需重新发明轮子即可使用我的服务。我在Internet上搜索并找到了这篇来自Microsoft的有趣文章。 但是,它似乎只适用于azure函数v2(. net core),因为每当我尝试安装时,我总是收到以下错误: 检测到Microsoft.Azure.WebJobs
我已经成功地将依赖注入用于我自己的自定义服务,如本文所述。 我想要的是在我的定制服务中使用框架作为参数注入Azure函数的绑定器。用作函数参数的示例: 我尝试将Binder作为参数添加到我的服务构造函数并让框架创建我的服务实例,但传入的Binder始终为空。 我的服务构造函数: 注册如下: 有人知道这是否可能吗?如果可能,我做错了什么?
我有一个自定义类,它有一个参数化构造函数 因此,实例化时需要3个参数。如果我想将这个类作为依赖项添加,我发现在Spring中没有直接的方法可以做到这一点。 我知道我可以简单地创建一个类的新实例并使用它的方法。但是我找不到任何直接的方法将这个类注入我的另一个类,即Rest控制器。 需要注意的是:所有3个参数都需要在运行时传递。我不能从属性文件中使用它们 即使Spring中没有直接的方法,我也想知道定
我正在使用< code>Azure Function v2。下面是我使用构造函数注入的函数: 我在从派生的Startup类中声明了我要注入Azure函数的所有依赖项: Azure函数调用其他依赖于ILogger的注入服务,例如< code > iaccountworf : 问题在于DI找不到任何<code>ILogger 问题 如何在< code>IWebJobsStartup中设置< code>