Search code examples
asp.netasp.net-mvcasp.net-mvc-5owinkatana

How do I get an instance of IAppBuilder elsewhere in my ASP.NET MVC 5.2.3 application?


I need to build an Owin middle-ware object but not from within the Startup class. I need to build it from within anywhere else in my code, so I need a reference to the AppBuilder instance of the application. Is there a way to get that from anywhere else?


Solution

  • You could simply inject AppBuilder itself to OwinContext. But since Owin context only supports IDisposable object, wrap it in IDisposable object and register it.

    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
        }
    }
    

    So in everywhere of your code you have access IAppBuilder object.

    public class FooController : Controller
    {
        public ActionResult BarAction()
        {
            var app = HttpContext.Current.GetOwinContext().Get<AppBuilderProvider>().Get();
            // rest of your code.        
        }
    }