J'essaie de développer une application d'hébergement Web autonome en utilisant OWIN. Dans ma propre classe XyzStartup, j'ai besoin d'un argument externe: contentFolderPath.
Cependant, je n'ai pas trouvé de moyen de passer cet argument. Voici mon code ci-dessous:
var contentFolderPath = this.TextBox.Text; // user input
var startOptions = new StartOptions();
using(WebApp.Start<XyzStartup>(startOptions)){
}
Ma startup
public class XyzStartup
{
XyzStartup(string contentFolderPath) { ... }
}
J'ai remarqué qu'il existe une classe StartOption, mais ne savez pas comment l'utiliser. Puis-je l'utiliser dans ma classe XyzStartup?
Merci d'avance!
Je trouve enfin un moyen de le faire:
var startOptions = new StartOptions();
startOptions.Urls.Add('..some url ..');
WebApp.Start(startOptions, (appBuilder)=>{
new XyzStartup(contentFolderPath).Configuration(appBuilder);
}
Si vous souhaitez passer le paramètre à la classe StartUp, vous pouvez utiliser Action<IAppBuilder>
dans WebApp. Commencez comme Cillié Malan mentionné dans le commentaire au lieu de lancer avec le paramètre Type (WebApp.Start<T>
)
Voici un exemple concret d'auto-hébergement:
object someThingYouWantToAccess;
var server = WebApp.Start("http://localhost:8080/", (appBuilder) =>
{
// You can access someThingYouWantToAccess here
// Configure Web API for self-Host.
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
});
Pour autant que je sache, bien que cela ait pu être possible auparavant, il n'est pas possible de passer des paramètres à la classe de démarrage.
Cependant, lors de l'auto-hébergement, j'ai remarqué que la classe de démarrage est créée dans le même thread qui appelle WebApp.Start
. Dans cet esprit, j'ai utilisé un champ ThreadStatic
pour transmettre des informations à la classe de démarrage (dans mon cas, je voulais passer HttpConfiguration
):
public class Startup
{
private HttpConfiguration _configuration;
[ThreadStatic]
internal static HttpConfiguration _configurationHolder;
public static HttpConfiguration CurrentConfiguration
{
get { return _configurationHolder; }
set { _configurationHolder = value; }
}
public Startup()
{
//get the configuration which is held in a threadstatic variable
_configuration = _configurationHolder;
}
public void Configuration(IAppBuilder appBuilder)
{
//do stuff
}
}
Et puis ailleurs, j'ai une autre méthode qui démarre le site auto-hébergé:
public void Start(StartOptions startupOptions, HttpConfiguration configuration)
{
Startup.CurrentConfiguration = configuration;
_application = WebApp.Start<Startup>(startupOptions);
Startup.CurrentConfiguration = null;
}