首页 > 解决方案 > 可以在我的 Azure Function 中使用静态 Simple Injector DI 容器吗?

问题描述

我有一个 Simple Injector DI Container,它有助于实例化我的函数所需的各种依赖项。我知道静态变量在 Azure Functions 中有特殊处理,我想确保我做对了。下面是我的代码。这个对吗?

public static class DeviceDataFunction
{
    public static Container Container = SimpleInjectionInitializer.Initialize();

    [FunctionName("DeviceDataFunction")]
    public static void Run([ServiceBusTrigger("devicedatatopic", "devicedatasubscription", AccessRights.Manage, Connection = @"ConnectionStringKey")]string data, Microsoft.Extensions.Logging.ILogger log)
    {
        var logger = new ILoggerAdapter(log);

        logger.Info($"DeviceDataFunction ServiceBus topic trigger function processed message: {data}");

        try
        {
            var DeviceDataService = new DeviceDataHelper(logger,
                Container.GetInstance<IDeviceDataProvider>(),
                Container.GetInstance<IDeviceProvider>(),
                Container.GetInstance<IDeviceAlarmProvider>(),
                Container.GetInstance<IAlarmTopicHandler>(),
                Container.GetInstance<ICacheClient>());
            DeviceDataService.Process(data);
        }
        catch(Exception ex)
        {
            var message = (ex.InnerException != null) ? ex.Message + "\n" + ex.InnerException.Message : ex.Message;
            message += (ex.InnerException != null) ? ex.StackTrace + "\n" + ex.InnerException.StackTrace : ex.StackTrace;
            logger.Error(message);
            throw;
        }
    }
}

标签: c#dependency-injectionazure-functionssimple-injector

解决方案


它看起来在技术上是正确的。

Azure Functions 对静态没有任何特殊处理,只是因为函数始终是静态的,所以您必须使用静态初始化程序。


推荐阅读