Pass a parameter to OWIN host

2019-04-05 13:51发布

I'm self-hosting ASP.NET Web API and SignalR using OWIN. I start the server (on a console app) with this code:

using (WebApplication.Start<Startup>(url))
{
    Console.WriteLine("Running...");
    Console.ReadLine();
}

This works fine. But now I need to pass a parameter (an object) to the Startup class. How can this be done?

标签: c# owin
2条回答
姐就是有狂的资本
2楼-- · 2019-04-05 14:45

The WebApplication.Start method has an overload that accepts a IServiceProvider as parameter, so it is possible to inject the data I want.

IServiceProvider serviceProvider = DefaultServices.Create(defaultServiceProvider =>
{
    defaultServiceProvider.AddInstance<IMyInterface>(myInstance);
});

using (WebApplication.Start<Startup>(serviceProvider, url)){ ... }

Now, on my Startup class I only need to create a constructor that receives the IMyInterface:

public Startup(IMyInterface myInstance)
{
    ...
}
查看更多
相关推荐>>
3楼-- · 2019-04-05 14:49

You can use the WebApp.Start Method (String, Action<IAppBuilder>) overload.

Example:

using (WebApplication.Start(url, appBuilder => new Startup(myObject).Configuration(appBuilder)))
{
    Console.WriteLine("Running...");
    Console.ReadLine();
}
查看更多
登录 后发表回答