У меня есть класс помощников 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. Проблема в вашем коде, и компилятор С# говорит вам, что неправильно.
Проблема в том, что ваш метод DeserializeXmlAsProductTypes
статичен, но вы пытаетесь получить доступ к полю экземпляра. Это невозможно в.NET, поэтому компилятор С# представляет вам ошибку.
Решение состоит в том, чтобы сделать метод DeserializeXmlAsProductTypes
методом экземпляра, просто удалив ключевое слово static
из определения метода.
Однако это может привести к сбою другого кода в вашем приложении, поскольку может быть некоторый код, который зависит от этого статического метода. Если это так, решение здесь заключается в том, чтобы вставить Serializar
в конструктор такого класса, чтобы сбойный код мог использовать экземпляр Serializar
и вызвать новый DeserializeXmlAsProductTypes
экземпляра DeserializeXmlAsProductTypes
.
Serializar
зарегистрирован и разрешен Autofac. В этом случае Autofac предоставит вам этотIStorageService
.