将配置属性传递给控制器

时间:2017-06-01 22:24:48

标签: asp.net-web-api owin

我在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的新手,所以我可能会遗漏一些明显的东西。

0 个答案:

没有答案