C# Autofac将数据注入OWIN启动类

C# Autofac将数据注入OWIN启动类,c#,dependency-injection,asp.net-web-api2,owin,autofac,C#,Dependency Injection,Asp.net Web Api2,Owin,Autofac,我已经四处寻找了一段时间,但找不到我特定问题的答案: 如何使用Autofac(通过构造函数或属性)将数据注入OWIN启动类 我在Windows服务中使用Autofac,该服务还处理后端服务的创建等。因此,我在其中执行所有配置读取和容器构建 我希望能够注册Startup类,这样就可以为CORS注入允许的源代码,但即使我使用如下属性注册对象: var builder = new ContainerBuilder(); // This will actually be read from config

我已经四处寻找了一段时间,但找不到我特定问题的答案:

如何使用Autofac(通过构造函数或属性)将数据注入OWIN启动类

我在Windows服务中使用Autofac,该服务还处理后端服务的创建等。因此,我在其中执行所有配置读取和容器构建

我希望能够注册Startup类,这样就可以为CORS注入允许的源代码,但即使我使用如下属性注册对象:

var builder = new ContainerBuilder();
// This will actually be read from config.
var origins = new[]
              {
                  "http://localhost",
                  "http://localhost:8082",
              };
builder.Register(c => new Startup(origins));
var container = builder.Build();
在运行时,当启动类被实例化时,调用堆栈显示它来自外部代码,并且我的Autofac builder没有将属性推入

理想情况下,我希望将我的Autofac注册保存在一个地方(Windows服务类),只需将所需数据注入启动,这样我就可以执行以下操作(其中
allowedOrigins
设置为属性或通过构造函数注入)

任何想法都将不胜感激。 谢谢

彼得斯基

更新

我应该补充一点,在尝试Autofac注册和构建后,我通过以下操作启动了OWIN自助主机应用程序:

var webApp = WebApp.Start<Startup>(baseAddress);

在这里,我将把
IEnumerable
源添加到
Startup
类的ctor中。这确实有效!但感觉像是使用Autofac来处理为Startup类提供所需的功能。

开箱即用的Autofac不支持您需要的功能

在IIS或其他非自托管环境中,没有用于构建容器然后注入启动类的钩子。这有点像鸡/蛋的问题——startup类是开始构建容器的钩子

在自托管环境中,您提到的建议——创建启动对象并将其传递到调用
WebApp.Start
——是您的最佳选择


基本上,在某个时刻,您将到达应用程序的入口点(通常在OWIN中,这是启动类),这是您必须构建容器并成为解决和启动问题的引导程序的点。Autofac无法帮助您实现这一点-这取决于您使用的框架(例如,MVC、OWIN、Web API等)。

现成的Autofac不支持您所需的功能

在IIS或其他非自托管环境中,没有用于构建容器然后注入启动类的钩子。这有点像鸡/蛋的问题——startup类是开始构建容器的钩子

在自托管环境中,您提到的建议——创建启动对象并将其传递到调用
WebApp.Start
——是您的最佳选择

基本上,在某个时刻,您将到达应用程序的入口点(通常在OWIN中,这是启动类),这是您必须构建容器并成为解决和启动问题的引导程序的点。Autofac无法帮助您做到这一点-这取决于您使用的框架(例如,MVC、OWIN、Web API等)

var webApp = WebApp.Start<Startup>(baseAddress);
var startup = new Startup(origins);
var webApp = WebApp.Start(startup, baseAddress);