Autofac Contrib Multi Tenant throws"请求在此上下文中不可用"例外

时间:2011-02-10 10:40:51

标签: autofac

我在ASP.Net MVC 3.0上使用http://code.google.com/p/autofac/wiki/MultitenantIntegration版本2.4.4和Autofac 2.4.4。

我使用新的Asp.Net MVC 3支持(使用AutofacDependencyResolver)。我遇到一个问题,即租户识别策略类(实现ITenantIdentificationStrategy)抛出“请求在此上下文中不可用”异常。

我尝试使用AutofacContrib.Multitenant.Web.RequestParameterTenantIdentificationStrategy类,它也会抛出相同的异常。

我的application_start看起来如下

protected void Application_Start()
{
    //wire up all the necessary objects used in this web application
    IContainer container = BootStrap.RegisterAll().Build();

    //multi tenant support
    MultitenantContainer multiTenant = new MultiTenancy().Register(container);


    DependencyResolver.SetResolver(new AutofacDependencyResolver(multiTenant.BeginLifetimeScope()));

}

1 个答案:

答案 0 :(得分:2)

没关系。 IIS 7.0中的Application_Start中不提供HttpContext.Current.Request。唯一的解决方案是捕获HTTPException并在Catch处将TenantId设置为null并返回false。

    public bool TryIdentifyTenant(out object tenantId)
    {
        var current = HttpContext.Current;

        try
        {
            if (current == null)
            {
                tenantId = null;
                return false;
            }

            var request = current.Request;
        }
        catch (HttpException)
        {
            tenantId = null;
            return false;
        }

        //continue with your tenant identification
    }