【发布时间】:2015-11-11 15:39:19
【问题描述】:
我已经在 SO 上四处寻找了一段时间,但找不到我的特定问题的答案:
如何使用 Autofac 将数据(通过构造函数或属性)注入 OWIN Startup 类?
我在 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();
在运行时,当 Startup 类被实例化时,调用堆栈显示它来自外部代码,而我的 Autofac 构建器没有将属性推入。
理想情况下,我希望将我的 Autofac 注册保存在一个地方(Windows 服务类),并将所需的数据注入 Startup,这样我就可以在下面执行类似的操作(其中 allowedOrigins 设置为属性或通过构造函数注入)
public void Configuration(IAppBuilder app)
{
var configuration = new HttpConfiguration();
...
var origins = string.Join(",", allowedOrigins);
var cors = new EnableCorsAttribute(origins, "*", "*") { SupportsCredentials = true };
configuration.EnableCors(cors);
....
}
任何想法将不胜感激。 谢谢
佩特斯基
更新
我应该补充一点,在尝试 Autofac 注册和构建之后,我正在通过以下方式启动 OWIN 自托管应用程序:
var webApp = WebApp.Start<Startup>(baseAddress);
通过与朋友的对话,他们建议创建Startup 对象并将其传递给WebApp:
var startup = new Startup(origins);
var webApp = WebApp.Start(startup, baseAddress);
在这里,我将IEnumerable<string> 来源添加到Startup 类的ctor。这确实有效!但感觉就像它使用 Autofac 来处理为 Startup 类提供所需的东西。
【问题讨论】:
标签: c# dependency-injection asp.net-web-api2 owin autofac