gpt4 book ai didi

dependency-injection - 带有 Autofac 和 webjob 的 IServiceProvider

转载 作者:行者123 更新时间:2023-12-02 17:12:50 32 4
gpt4 key购买 nike

我在 Azure webJob 中工作。我将 autofacIJobActivator 一起使用,一切正常。但是现在,我需要调用使用 IServiceProvider 的代码,那时我从 Autofac 收到错误,因为 IServiceProvider 未知。

当我使用 Microsoft.Extensions.DependencyInjection.ServiceCollection() 代替 Autofac 注册我的接口(interface)时,它正在工作(我不我不知道 IServiceProvider 在哪里注册,但它正在工作)。

我工作的公司要求我明确使用 Autofac。我努力寻找使用 Autofac 的方法,但在 WebJob 中声明了 IServiceProvider

有人有想法吗?

最佳答案

I need to call code that is using IServiceProvider and at that moment I get an error from Autofac because IServiceProvider is not known. Does that mean when running your Webjob, you could not find the IServiceProvider in AutofacActivator. I am not clear about how do you define IServiceProvider and how do you inject it?

我认为您可以将 IServiceProvider 注入(inject)作业激活器并注册它,然后您可以使用该实例来获取服务。

您可以在构建之前在 ContainerConfig 中注册 IServiceProvider 接口(interface):

public static class ContainerConfig
{
public static IContainer GetContainer()
{
var builder = new ContainerBuilder();

builder.RegisterType<Functions>();

builder.RegisterType<HelloGenerator>().As<IStringGenerator>().SingleInstance();
builder.Register<IServiceProvider>(context =>
{
var serviceCollection = new ServiceCollection();
//todo: register the interfaces
return serviceCollection.BuildServiceProvider();
}).SingleInstance();

return builder.Build();
}
}

在函数中触发时获取服务:

public class Functions
{
private readonly IStringGenerator _stringGenerator;
private readonly IServiceProvider _serviceProvider;
public Functions(IStringGenerator strGenerator,IServiceProvider serviceProvider)
{
_stringGenerator = strGenerator;
_serviceProvider = serviceProvider;
}
public void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)
{
log.WriteLine(_stringGenerator.GetWord());
log.WriteLine(_serviceProvider.GetService(xxxxxx));
}
}

在程序中:

static void Main()
{
var config = new JobHostConfiguration
{
JobActivator = new AutofacActivator(ContainerConfig.GetContainer())
};
var host = new JobHost(config);

host.RunAndBlock();
}

在 AutofacActivator 中:

public class AutofacActivator : IJobActivator
{
private readonly IContainer _container;

public AutofacActivator(IContainer container)
{
_container = container;
}

public T CreateInstance<T>()
{
return _container.Resolve<T>();
}
}

如果这不是你想要的,希望你能给我更详细的描述和你的主要思想代码。

关于dependency-injection - 带有 Autofac 和 webjob 的 IServiceProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194726/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com