c# - 在 Azure 函数中缺少注册时依赖项注入(inject)注入(inject) null

标签 c# dependency-injection azure-functions

我正在将 null 注入(inject)到我的构造函数中,该构造函数具有我忘记注册的依赖项。

在下面的示例中,当您忘记在启动类中注册 IDepencency 时,依赖项将为 null

public class AzureFunction {
    public AzureFunction(IDepencency dependency) {

    }
}

我希望它能像在 .net 核心 DI 中一样工作。

这是预期的行为吗?我可以更改设置以启用抛出异常吗?

编辑:

阅读 HariHaran 的回答后,我意识到它只发生在子依赖项中。这是一个可重现的例子:

public interface IClass1 { }

public class Class1 : IClass1
{
    private readonly IClass2 _class2;

    public Class1(IClass2 class2)
    {
        _class2 = class2; // This will be null
    }
}

public interface IClass2 { }

public class Class2 : IClass2 { }

public class Function1
{
    private readonly IClass1 _class1;
    public Function1(IClass1 class1)
    {
        _class1 = class1;
    }

    [FunctionName("Function1")]
    public async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous,"post", Route = null)]
        HttpRequestMessage req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
        return req.CreateResponse(HttpStatusCode.Accepted);

    }
}

并将其放入functionsStartup:

[assembly: FunctionsStartup(typeof(Startup))]
namespace FunctionApp2
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddSingleton<IClass1, Class1>();
            //builder.Services.AddSingleton<IClass2, Class2>(); // Leave this commented
        }
    }

}

最佳答案

如果框架没有抛出异常,那么您可以在函数的构造函数中手动抛出异常。

例如

public class AzureFunction {
    private readonly IDependency _dependency;

    public AzureFunction(IDepencency dependency) {
        _dependency = dependency ?? throw new ArgumentNullException(nameof(dependency));
    }

    //...
}

关于c# - 在 Azure 函数中缺少注册时依赖项注入(inject)注入(inject) null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991405/

相关文章:

c# - 在 C# 中压缩字符串然后在 JavaScript 中解压缩?

c# - Automapper:序列不包含任何元素。

c# - 使用 Microsoft Asp.NET 依赖注入(inject)时找不到 HttpActionContext.get_Request() 方法

azure-functions - 从函数应用访问虚拟网络中的 Cosmos DB

c# - 类公开事件,如何知道是否有人订阅它

c# - 存储对实例方法的静态引用?

Angularjs 4 - 注入(inject)服务而不在构造函数上传递参数

c# - 使用 NInject,在注入(inject)构造函数参数时解析 IEnumerable<T> 失败,但在执行 Get<IEnumerable<T>>() 时则不会

Azure 逻辑应用步骤失败并出现错误 "BadRequest. Http request failed: the timeout was reached"

javascript - Azure Functions Http 触发器 - DocumentDB 输出集成 Microsoft.Azure.Documents.Client : Value cannot be null