C# 如何将Nancy与Autofac和ASP.NET核心windows服务集成
让我尽量保持简单。我的最终目标是使用C# 如何将Nancy与Autofac和ASP.NET核心windows服务集成,c#,asp.net-core,dependency-injection,autofac,nancy,C#,Asp.net Core,Dependency Injection,Autofac,Nancy,让我尽量保持简单。我的最终目标是使用asp.net core 2.1和Nancy框架创建windows服务 经过大量研究,我发现以下步骤 设置Windows服务- 将Nancy连接到.net核心应用程序 问题陈述 Install-Package Nancy.Bootstrappers.Autofac -Version 2.0.0-clinteastwood 我的Windows服务使用的类库是使用DI的.net标准和Autofac开发的 现在,我如何集成Autofac而不是Nancy的微
asp.net core 2.1
和Nancy
框架创建windows服务
经过大量研究,我发现以下步骤
设置Windows服务-
将Nancy连接到.net核心应用程序
问题陈述
Install-Package Nancy.Bootstrappers.Autofac -Version 2.0.0-clinteastwood
我的Windows服务使用的类库是使用DI的.net标准和Autofac
开发的
现在,我如何集成Autofac
而不是Nancy的微型IOC容器
我尝试安装nuget
Install-Package Nancy.Bootstrappers.Autofac -Version 2.0.0-clinteastwood
并编写了如下代码
protected override void ConfigureApplicationContainer(ILifetimeScope container)
{
_services.Configure<Settings>(_configuration.GetSection("MySettings"));
var deviceId = _configuration["Settings:DeviceId"];
var containerFactory = new ContainerFactory();
container.Update(builder =>
{
builder.RegisterInstance(containerFactory).As<IContainerFactory>();
containerBuilder.Register(c => new Engine(containerFactory));
containerBuilder.Register(i =>
new HubClient(deviceId, containerFactory))
.As<HubClient>().SingleInstance();
});
base.ConfigureApplicationContainer(container);
}
protected override void ConfigureApplicationContainer(ILifetimeScope容器)
{
_services.Configure(_configuration.GetSection(“MySettings”));
var deviceId=_配置[“设置:deviceId”];
var containerFactory=new containerFactory();
container.Update(builder=>
{
builder.RegisterInstance(containerFactory).As();
Register(c=>newengine(containerFactory));
containerBuilder.Register(i=>
新HubClient(deviceId,containerFactory))
.As().SingleInstance();
});
基本配置应用程序容器(容器);
}
在这里,我想注入我的类实例。但是怎么做呢?
public static void Main(string[] args)
{
var isService = !(Debugger.IsAttached || args.Contains("--console"));
var builder = CreateWebHostBuilder(args.Where(arg => arg != "--console").ToArray());
if (isService)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
builder.UseContentRoot(pathToContentRoot);
}
var host = builder.Build();
if (isService)
{
//this line fails
IContainerFactory containerfactory = host.Services.GetService<IContainerFactory>();
host.RunAsCustomService();
}
else
{
host.Run();
}
}
publicstaticvoidmain(字符串[]args)
{
var isService=!(Debugger.IsAttached | | args.Contains(“--console”);
var builder=CreateWebHostBuilder(args.Where(arg=>arg!=“--console”).ToArray();
如果(iService)
{
var pathToExe=Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot=Path.GetDirectoryName(pathToExe);
builder.UseContentRoot(pathToContentRoot);
}
var host=builder.Build();
如果(iService)
{
//这条线坏了
IContainerFactory containerfactory=host.Services.GetService();
host.RunAsCustomService();
}
其他的
{
host.Run();
}
}
如何获取/注入引擎和HubClient实例