如何解决如何在IWebHost上使用Autofac
我有一个在Service Fabric中运行的AspNet Core Web应用程序(DotNetCore 3.1)。 您可能知道,Service Fabric使Program.cs和Startup.cs有点特殊。
在任何情况下,它对于Microsoft Dependency Injection都可以完美运行,但是当我尝试使用Autofac对其进行配置时,通过查看文档或使用Google搜索似乎无法成功。
我添加了Autofac.Extensions.DependencyInjection
nuget程序包,它允许我执行以下操作:
Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory());
但是,我的Sateless服务结构Web Api项目中包含以下内容:
/// <summary>
/// The FabricRuntime creates an instance of this class for each service type instance.
/// </summary>
internal sealed class SampleStatelessWebApi : StatelessService
{
public SampleStatelessWebApi(StatelessServiceContext context)
: base(context)
{ }
/// <summary>
/// Optional override to create listeners (like tcp,http) for this service instance.
/// </summary>
/// <returns>The collection of listeners.</returns>
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
var serviceInstanceListeners = new ServiceInstanceListener[]
{
new ServiceInstanceListener(serviceContext =>
new KestrelCommunicationListener(serviceContext,"ServiceEndpoint",(url,listener) =>
{
ServiceEventSource.Current.ServiceMessage(serviceContext,$"Starting Kestrel on {url}");
return new WebHostBuilder()
.UseKestrel()
.UseCommonConfiguration()
.ConfigureServices(
services => services
.AddSingleton<StatelessServiceContext>(serviceContext))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener,ServiceFabricIntegrationoptions.None)
.UseUrls(url)
.Build();
}))
};
return serviceInstanceListeners;
}
}
和我用于集成测试的TestServer如下:
var server =
new TestServer(
new WebHostBuilder()
.UseStartup<Startup>()
.UseCommonConfiguration()
.UseEnvironment("Test")
.ConfigureTestServices(ConfigureTestServices));
换句话说,我有一个WebHostBuilder,而不是主机。
See my sample working without Autofac。我只需要能够向其中添加Autofac支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。