MVC WebAPI AutoFac设置OAuth选项

时间:2014-07-24 06:12:45

标签: asp.net-mvc autofac

我是AutoFac的新手,所以请原谅我这是一个非常基本的问题。我在MVC 5(Visual Studio)中使用SPA模板。在Startup.Auth.cs文件中,我有以下代码

static Startup()
{
    OAuthOptions = new OAuthAuthorizationServerOptions
    {
       TokenEndpointPath = new PathString("/Token"),
       Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),  //I need to pass in UserManagerFactory through AutoFac
       AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
       AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
       AllowInsecureHttp = true
   };
}

我需要通过解析AutoFac来传递UserManagerFactory。我该怎么做呢? 在单独的课程中,我有以下内容

builder.RegisterType<CRMUserStore<IdentityUser>>().As<IUserLoginStore<IdentityUser>>   ().InstancePerRequest();  //builder is an instance of ContainerBuilder in AutoFac

1 个答案:

答案 0 :(得分:0)

一个选项是访问容器并手动解决依赖关系,如此

var userManagerFactory= container.Resolve<UserManagerFactory>();

但这意味着您需要从app / global.asax公开容器。这是连接autofac的好地方。

另一个选择是使用类的构造函数进行依赖注入,但是这是你做过一次而不是每次实例化一个控制器的时候,我这是&#34;手册&#34;容器解析会做得很好。

在这里,您可以使用WebAPI查看我的一个autofac配置的片段。正如您所看到的,我使用autofac模块,这只是为了#34; group&#34;逻辑部分一起放入容器中,你可以像你一样注册。使用这种方法,每次请求到达webapi控制器时,Autofac都会自动解析所有与控制器的依赖关系。

 protected void Application_Start()
    {            
        GlobalConfiguration.Configure(WebApiConfig.Register);
        Initialize();
    }

    private static void Initialize()
    {
        var builder = new ContainerBuilder();

        //register aptnet controllers
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

        //register custom modules
        builder.RegisterModule<StorageModule>();

        //build container
        var container = builder.Build();

        // Create the depenedency resolver.
        var resolver = new AutofacWebApiDependencyResolver(container);

        // Configure Web API with the dependency resolver.
        GlobalConfiguration.Configuration.DependencyResolver = resolver;

    }