我是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
答案 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;
}