Проблема Autofac ServiceLocator в выпуске v2.4.5.724 - PullRequest
0 голосов
/ 25 марта 2011

Я только что обновился до MVC 3, а также необходимо обновить Autofac.

Следующий код работал, но теперь не работает с этой ошибкой -

Эта операция разрешения ужезакончился.При регистрации компонентов с использованием лямбда-выражения параметр IComponentContext 'c' для лямбды не может быть сохранен.Вместо этого либо снова разрешите IComponentContext из 'c', либо разрешите фабрику на основе Func <> для создания последующих компонентов из.

    public static IServiceLocator Locator;

    public class ServiceA : IServiceA
    {
    }

    public interface IServiceA
    {
    }

    [Test]
    public void TestAutofacServiceLocator()
    {
        // This resolve operation has already ended. When registering components using lambdas, the IComponentContext 'c' parameter to the lambda cannot be stored. 
        // Instead, either resolve IComponentContext again from 'c', or resolve a Func<> based factory to create subsequent components from.
        var builder = new ContainerBuilder();

        builder.RegisterType<ServiceA>().As<IServiceA>();

        builder.Register(c => Locator = new AutofacServiceLocator(c)).As<IServiceLocator>().SingleInstance();

        var container = builder.Build();

        container.Resolve<IServiceLocator>();
        var x = Locator.GetInstance<IServiceA>();
        Assert.NotNull(x);
    }

Как мне следует повторно зарегистрировать IServiceLocator?

Iпосмотрел на ответ на вопрос проблема с автоматической регистрацией в выпуске v2.4.5.724 но я все еще в замешательстве.

1 Ответ

1 голос
/ 25 марта 2011

Я действительно должен был прочитать сообщение об ошибке Ника, ответ был в сообщении.

Исправлено !!

builder.Register(c => Locator = new AutofacServiceLocator(c.Resolve())) .As().SingleInstance();

...