Autofac: cómo resolver Func para ISomething desde Singleton donde ISomething es InstancePerHttpRequest

Estoy tratando de usar Autofac para inyectar dependencias en FluentValidation en una aplicación MVC 4. Creo que la estrategia se resolvió, pero me estoy quedando estancado al resolver el ISomething por solicitud de un singleton.

Aquí está el escenario: Tengo un validador que deriva del AbstractValidation de FluentValidation. He leído que los validadores de FluentValidation funcionan mejor como singletons, por lo que mi constructor espera un Func y almacena esa Factory para su uso posterior. Cuando se utiliza el validador, debe solicitar a la fábrica almacenada un IDataStore, obtener la instancia creada para esa solicitud y usarla. Esa es la teoría. Quiero dar crédito ahttps://github.com/robdmoore/UnobtrusiveMVCTechniques, lo que me ayudó a instalarme en esta solución. Aquí está el validador ...

public class SiteAdminViewModelValidator : AbstractValidator<SiteAdminViewModel> {
    private readonly Func<IDataStore> _dbFactory;

    public SiteAdminViewModelValidator(Func<IDataStore> dbFactory) {
        _dbFactory = dbFactory;

        RuleFor(model => model.SiteCode).Length(1, 40).Must(BeSpecial);
    }

    public bool BeSpecial(string siteCode) {
        var db = _dbFactory();
        List<Stuff> stuffs = db.All<Stuff>().ToList();

        return true;
    }
}

Si alguien me puede indicar un ejemplo práctico de lo que estoy tratando de lograr, sería genial, pero también me gustaría saber la solución a esta pieza particular de acrobacias de Autofac.

Aquí está mi registro de validador ...

public class FluentValidatorModule : Module {
    protected override void Load(ContainerBuilder builder) {
        base.Load(builder);
        builder.RegisterType<AutofacValidatorFactory>().As<IValidatorFactory>().SingleInstance();

    var validators = AssemblyScanner.FindValidatorsInAssembly(System.Reflection.Assembly.GetExecutingAssembly());
    validators.ToList().ForEach(v => builder.RegisterType(v.ValidatorType).As(v.InterfaceType).SingleInstance());
    }
}

Aquí está mi registro para la fábrica de IDataStore ...

builder.RegisterType<SuperDB>().As<IDataStore>().InstancePerHttpRequest();
builder.Register<Func<IDataStore>>(c => {
                                       var context = c.Resolve<IComponentContext>();
                                       return context.Resolve<IDataStore>;
                                   });

Aquí está el error que recibo cuando mi validador solicita un IDataStore en la línea - var db = _dbFactory ();

Ningún ámbito con una etiqueta que coincida con 'AutofacWebRequest' es visible desde el ámbito en el que se solicitó la instancia. Esto generalmente indica que un componente registrado como solicitud HTTP está siendo solicitado por un componente SingleInstance () (o un escenario similar). Bajo la integración web, siempre se solicitan dependencias desde DependencyResolver.Current o ILifetimeScopeProvider.RequestLifetime, nunca desde el propio contenedor .

... que es exactamente lo que obtuve cuando lo probé antes de escribir mi propio registro de Factory: el registro Func. Desde la lectura de varias respuestas a preguntas similares, parecía que lo que tenía arriba debería funcionar porque pensé que ahora estaba resolviendo el Func para obtener el resolutor actual.

Cualquier ayuda será apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta