我需要构建一个 Owin 中间件对象,但不是从 Startup
类中构建。我需要从代码中的其他任何位置构建它,因此我需要对应用程序的 AppBuilder
实例的引用。有没有办法从其他地方获取它?
最佳答案
您可以简单地将 AppBuilder
本身注入(inject)到 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.Current.GetOwinContext().Get<AppBuilderProvider>().Get();
// rest of your code.
}
}
关于asp.net - 如何在 ASP.NET MVC 5.2.3 应用程序中的其他位置获取 IAppBuilder 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915099/