Autofac - как разрешить Func для ISomething из Singleton, где ISomething - InstancePerHttpRequest

я пытаюсь использовать Autofac для внедрения зависимостей в FluentValidation в приложении MVC 4. Я думаю я'Я разработал стратегию, но яЯ застреваю с разрешением моего запроса на что-то из одного синглтона.

Вот'Сценарий: яу нас есть валидатор, который происходит от FluentValidation 's AbstractValidator. Я'мы читали, что валидаторы FluentValidation работают лучше всего как синглтоны, поэтому мой конструктор ожидает Func и сохраняет эту Factory для дальнейшего использования. Когда используется валидатор, он должен запросить у хранимой фабрики IDataStore, получить экземпляр, созданный для этого запроса, и использовать его. Тот'С теорией. Я хочу отдать должноеhttps://github.com/robdmoore/UnobtrusiveMVCTechniques, который помог мне остановиться на этом решении. Вот'с валидатором ...

public class SiteAdminViewModelValidator : AbstractValidator {
    private readonly Func _dbFactory;

    public SiteAdminViewModelValidator(Func dbFactory) {
        _dbFactory = dbFactory;

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

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

        return true;
    }
}

Если кто-то может указать мне рабочий пример того, что яЯ пытаюсь достичь этого, это было бы здорово, но яЯ также хотел бы узнать решение этой конкретной проблемы хитрости Autofac.

Вот'моя регистрация валидатора ...

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

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

Вот'Моя регистрация на заводе IDataStore ...

builder.RegisterType().As().InstancePerHttpRequest();
builder.Register(c => {
                                       var context = c.Resolve();
                                       return context.Resolve;
                                   });

Вот'ошибка яполучаю, когда мой валидатор запрашивает IDataStore в строке - var db = _dbFactory ();

Нет контекста с тегом соответствияAutofacWebRequest» виден из области, в которой был запрошен экземпляр. Как правило, это указывает на то, что компонент, зарегистрированный как запрос на HTTP, запрашивается компонентом SingleInstance () (или аналогичным сценарием). При веб-интеграции всегда запрашивают зависимости из DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, а не из самого контейнера. ,

... это именно то, что я получил, когда попробовал до написания своей собственной регистрации на Фабрике - регистрации Func. Прочитав различные ответы на похожие вопросы, я понял, что то, что у меня есть выше, должно сработать, потому что я думал, что теперь разрешаю Func, чтобы получить текущий распознаватель.

Любая помощь будет оценена.