我需要构建一个Owin中间件对象,但不是在Startup类中.我需要在我的代码中的任何其他地方构建它,所以我需要对应用程序的AppBuilder实例的引用.有没有办法从其他地方获得它?
解决方法
你可以简单地将AppBuilder本身注入OwinContext.但由于Owin上下文仅支持IDisposable对象,因此将其包装在IDisposable对象中并进行注册.
public class AppBuilderProvider : IDisposable { private IAppBuilder _app; public AppBuilderProvider(IAppBuilder app) { _app = app; } public IAppBuilder Get() { return _app; } public void Dispose(){} } public class Startup { // the startup method public void Configure(IAppBuilder app) { app.CreatePerOwinContext(() => new AppBuilderProvider(app)); // another context registrations } }
因此,在您的代码的任何位置,您都可以访问IAppBuilder对象.
public class FooController : Controller { public ActionResult BarAction() { var app = HttpContext.GetOwinContext().Get<AppBuilderProvider>().Get(); // rest of your code. } }