Настройте StructureMap для выбора реализации подкласса по сравнению с реализацией базового класса - PullRequest
1 голос
/ 17 октября 2019

У меня есть две реализации интерфейса IJsonConverter<T>. Одна реализация предназначена для базового класса с именем Vehicle, то есть для IJsonConverter<Vehicle>, а другая реализация предназначена для подкласса до Vehicle, называемого Car, который является реализацией для IJsonConverter<Car>. Когда я пытаюсь внедрить реализацию для IJsonConverter<Car>, я получаю исключение, я предполагаю, что StructureMap не знает, какую реализацию выбрать.

Можно ли настроить StructureMap для выбора реализации подкласса каким-либо образом?

Я настроил StructureMap следующим образом:

...
assemblyScanner.ConnectImplementationsToTypesClosing(typeof(IJsonConverter<>));
...

Я использую следующие классы:

Базовый класс

public class Vehicle {}

Подкласс

public class Car : Vehicle {}

Преобразователь базового класса

public class VehicleJsonConverter : IJsonConverter<Vehicle> {}

Преобразователь подкласса

public class CarJsonConverter : IJsonConverter<Car> {}

Сообщение об ошибке:

StructureMap.StructureMapConfigurationException: экземпляр по умолчанию не зарегистрирован и не можетбыть автоматически определено для типа 'IJsonConverter'

Экземпляр по умолчанию не указан. Текущая конфигурация для типа IJsonConverter:

PluginType          ...  Description
IJsonConverter<Car>      WebApplication.Json.Converters.VehicleJsonConverter
                         WebApplication.Json.Converters.CarJsonConverter
...