我有一个多租户MVC5 webapp,它使用Autofac v3.5.2和Autofac.Mvc5 v3.3.4。解决OWIN启动类中的Autofac依赖关系
我的Autofac DI接线发生在我的MVC项目中的一个类中。对于身份验证,我们使用OWIN OpenId middleware与Azure B2C进行集成。在OWIN启动类中,我需要依赖项来使用来自当前请求的信息来设置tenantId
/clientId
。 我尝试通过抓住依赖性:
DependencyResolver.Current.GetService<...>();
然而,这总是抛出ObjectDisposedException
实例不能得到解决,嵌套的寿命可以,因为它已经被设置为不从这个LifetimeScope创建。
我们在我们的应用程序中有一个ISiteContext,它有一个请求生命周期。它将获得特定于当前请求的配置值。我试图取这些值,如下所示:
private OpenIdConnectAuthenticationOptions CreateOptionsFromPolicy(string policy)
{
var options = new OpenIdConnectAuthenticationOptions
{
Notifications = new OpenIdConnectAuthenticationNotifications
{
...
RedirectToIdentityProvider = SetSettingsForRequest
}
}
}
private Task SetSettingsForRequest(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> context)
{
var siteContext = DependencyResolver.Current.GetService<ISiteContext>();
context.ProtocolMessage.ClientId = siteContext.ClientId;
return Task.FromResult(0);
}
尝试在SetSettingsForRequest中使用DependencyResolver时发生此错误。我不知道我在这里做错了什么。目前我没有Autofac我的启动Configuration(IAppBuilder app)
方法中的DI设置,因为这已经在我的MVC项目中设置。
你能分享更多的代码吗?你是如何获得'tenantId'的? –
@CyrilDurand我添加了一个代码示例,显示我试图解析依赖关系以获取每个请求的客户端的位置 –