Domanda

Ho un progetto utilizzando sia MVC che Webapi. È un'applicazione di riavvio di iscrizione, quindi ho preso il progetto di esecuzione di singola applicazione e averlo leggermente modificato per adattarsi.

Il di Lavori OK per i controller tuttavia quando provo a chiamare un controller WebAPI, continuo a ricevere un errore

.

Assicurarsi che il controller abbia un costruttore pubblico senza parametri.

C'è qualcos'altro che devo fare per usare Autofac con Webapi?

Questo è il codice dalla mia startup.cs

        public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "External", 
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive
        });
        ConfigureMembershipReboot(app);
    }

    private static void ConfigureMembershipReboot(IAppBuilder app)
    {
        System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<DefaultMembershipRebootDatabase, BrockAllen.MembershipReboot.Ef.Migrations.Configuration>());
        //System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<DefaultMembershipRebootDatabase>());
        var cookieOptions = new CookieAuthenticationOptions
        {
            AuthenticationType = MembershipRebootOwinConstants.AuthenticationType
        };
        BuildAutofacContainer(app, cookieOptions.AuthenticationType);
        app.UseMembershipReboot(cookieOptions);
    }

    private static void BuildAutofacContainer(IAppBuilder app, string authType)
    {
        var builder = new ContainerBuilder();

        var config = CreateMembershipRebootConfiguration(app);

        builder.RegisterInstance(config).As<MembershipRebootConfiguration>();
        builder.RegisterType<DefaultUserAccountRepository>()
            .As<IUserAccountRepository>()
            .As<IUserAccountQuery>()
            .InstancePerLifetimeScope();
        builder.RegisterType<UserAccountService>().OnActivating(e =>
        {
            var owin = e.Context.Resolve<IOwinContext>();
            var debugging = false;
         #if DEBUG
            debugging = true;
         #endif
            e.Instance.ConfigureTwoFactorAuthenticationCookies(owin.Environment, debugging);
        })
        .AsSelf()
        .InstancePerLifetimeScope();
        builder.Register(ctx =>
        {
            var owin = ctx.Resolve<IOwinContext>();
            return new OwinAuthenticationService(authType, ctx.Resolve<UserAccountService>(), owin.Environment);
        })
        .As<AuthenticationService>()
        .InstancePerLifetimeScope();

        builder.Register(ctx=>HttpContext.Current.GetOwinContext()).As<IOwinContext>();
        builder.RegisterControllers(typeof(Startup).Assembly);

        builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

        var container = builder.Build();
        System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    }
.

È stato utile?

Soluzione

Era un 1 liner:)

GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top