我在Windows服务中自我托管Owin,它提供了一些功能,并可以访问其他Windows以获取其他功能。我有一个提供商,它可以启动Owin应用程序,也是所有系统功能的入口点。
如何将对我的提供者的引用传递给每个控制器? ApiController类提供了Configuration.Properies,但我找不到将配置属性添加到配置属性的方法。 StartOptions类具有“设置”,但它只接受字符串值。我也没有看到将额外参数传递给Startup类的方法。配置方法。
public class Provider : BaseProvider
{
public override void StartUp()
{
var options = new StartOptions();
//StartOptions.Settings only allows string values
//I need to pass this provider to the controllers
WebApp.Start<StartUp>("http://SVS:1234");
}
}
internal class StartUp
{
private Provider _provider = null;
internal void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "POSEngineAPI",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//??? How can I set _provider when calling Startup.Config?
config.Properties.AddOrUpdate("Provider", _provider, (key, value) => _provider);
app.UseWebApi(config);
}
}
internal class SessionController : ApiController
{
[HttpPost]
public IHttpActionResult PostSession(Session session)
{
var provider = GetProvider();
//TODO
return Ok(session);
}
[HttpPut]
public IHttpActionResult PutSession(Session session)
{
var provider = GetProvider();
//TODO
return Ok(session);
}
private WebApiSignalRProvider GetProvider()
{
return Configuration.Properties["Provider"] as Provider;
}
}
我是Web Api和Owin的新手,所以我可能会遗漏一些明显的东西。