Как получить экземпляр IAppBuilder в другом месте приложения ASP.NET MVC 5.2.3?

Мне нужно создать объект среднего класса Owin, но не из класса Startup. Мне нужно построить его из любого места в моем коде, поэтому мне нужна ссылка на экземпляр AppBuilder приложения. Есть ли способ получить это из любого места?

Ответ 1

Вы можете просто ввести 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.        
    }
}