Разрешение IOwinContext в приложении MVC5 с использованием Autofac

У меня проблемы с использованиемMembershipReboot с новым шаблоном ASP MVC5 иAutofac, Я использовал шаблон MVC5 по умолчанию для настройки сайта, а затем попытался подключитьMembershipReboot фреймворк как замена для фреймворка ASP Identity, который поставляется с шаблоном.

Эта проблема, которую я имею, пытается решитьIOwinContext отAutofac контейнер. Вот моя проводка в классе Startup (сокращено до основ). Это проводка, использованная в образцах дляMembershipReboot Owin приложение (кроме того, что он использует Нэнси).

public partial class Startup
 {
    public void Configuration(IAppBuilder app)
    {
        var builder = new ContainerBuilder();
        builder.RegisterControllers(Assembly.GetExecutingAssembly());

        builder.Register(c => new DefaultUserAccountRepository())
            .As<IUserAccountRepository>()
            .As<IUserAccountQuery>()
            .InstancePerLifetimeScope();

        builder.RegisterType<UserAccountService>()
            .AsSelf()
            .InstancePerLifetimeScope();

        builder.Register(ctx =>
        {
            **var owin = ctx.Resolve<IOwinContext>();** //fails here
            return new OwinAuthenticationService(
                MembershipRebootOwinConstants.AuthenticationType,
                ctx.Resolve<UserAccountService>(),
                owin.Environment);
        })
            .As<AuthenticationService>()
            .InstancePerLifetimeScope();

        var container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

        ConfigureAuth(app);
        app.Use(async (ctx, next) =>
        {
            using (var scope = container.BeginLifetimeScope(b =>
            {
                b.RegisterInstance(ctx).As<IOwinContext>();
            }))
            {
                ctx.Environment.SetUserAccountService(() => scope.Resolve<UserAccountService>());
                ctx.Environment.SetAuthenticationService(() => scope.Resolve<AuthenticationService>());
                await next();
            }
        });
    }

А вот и мой контроллер с зависимостью, указанной в конструкторе контроллера.

public class HomeController : Controller
{
    private readonly AuthenticationService service;

    public HomeController(AuthenticationService service)
    {
        this.service = service;
    }

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}

Кажется, мне нужно обернутьAutofac контейнер вAutofacDependencyResolver для того, чтобы инфраструктура MVC использовала контейнер для разрешения компонентов. Это единственное существенное отличие отNancy Owin образец и мое использование в MVC5.

Когда я делаю это, мне кажется (из моей трассировки), что зависимость разрешается без предварительного прохождения черезOWIN middleware сложить такIOwinContext никогда не зарегистрирован.

Что я здесь не так делаю?

ОБНОВИТЬ:

Брок, твой новый пример отлично работает, когда я переношу конфигурацию в свой проект. Просто для моего понимания, кажется, что эта строка в вашем новом примере регистрирует текущий OwinContext с контейнером, и это то, что ранее отсутствовало.

builder.Register(ctx=>HttpContext.Current.GetOwinContext()).As<IOwinContext>();

В том, что

Ответы на вопрос(1)

Ваш ответ на вопрос