我有一个使用MVC和WebAPI的项目。 这是一个隶属队列重启应用程序,所以我拍摄了示例单个应用程序项目,并略微修改它以适应。

DI适用于控制器,但是当我尝试调用WebAPI控制器时,我不断收到错误

确保控制器具有不可分割的公共构造函数。

是否有其他我需要用webapi使用autofac?

这是我的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));
    }
.

有帮助吗?

解决方案

是一个1衬里:)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top