Как разрешить зависимость в Autofac?

1

У меня есть класс помощников Serializar, который будет десериализовать некоторые xml для меня. У меня также есть интерфейс под названием IStorageService, который имеет две реализации.

вот мой интерфейс IStorageService:

    public interface IStorageService
    {
        string GetFullImageUri(string fileName);
    }

Вот две реализации:

1-

    public class AzureBlobStorageService : IStorageService
    {
        private readonly string _rootPath;
        public string GetFullImageUri(string fileName)
        {
            return _rootPath + fileName;
        }
    }

2-

    public class FileSystemStorageService : IStorageService
    {    
        public string GetFullImageUri(string fileName)
        {
            return _applicationPath + "/Data/Images/"+ fileName;
        }
    }

Вот мой класс Serializar

    public class Serializar
    {
        private readonly IStorageService _storageService;

        public Serializar(IStorageService storageService)
        {
            _storageService = storageService;
        }
        public static List<ProductType> DeserializeXmlAsProductTypes(object xml)
        {
            // do stuff here.

           // this method require using  _storageService.GetFullImageUri("");
        }
    }

Я получаю эту компиляционную ошибку:

Ошибка 32 Ссылка на объект требуется для нестатического поля, метода или свойства "Serializar._storageService

Как разрешить это в IocConfig.cs с помощью Autofac?

Теги:
autofac

1 ответ

2

Вы не можете решить эту проблему с помощью Autofac. Проблема в вашем коде, и компилятор С# говорит вам, что неправильно.

Проблема в том, что ваш метод DeserializeXmlAsProductTypes статичен, но вы пытаетесь получить доступ к полю экземпляра. Это невозможно в.NET, поэтому компилятор С# представляет вам ошибку.

Решение состоит в том, чтобы сделать метод DeserializeXmlAsProductTypes методом экземпляра, просто удалив ключевое слово static из определения метода.

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

  • 0
    Если я сделаю это и вызову метод DeserializeXmlAsProductTypes (). Это не сгенерирует исключение, что _storageService имеет значение null или не имеет ссылки?
  • 0
    @Mohammadjouhari, нет, не будет, потому что вы убедитесь, что Serializar зарегистрирован и разрешен Autofac. В этом случае Autofac предоставит вам этот IStorageService .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню