StructureMap разрешает зависимость посредством внедрения вместо расположения службы
В моем проекте я регистрирую многоISerializers
реализации со сборочным сканером. FWIW это код, который регистрирует мойISerializers
Scan(scanner =>
{
scanner.AssemblyContainingType<ISerializer>();
scanner.AddAllTypesOf<ISerializer>().NameBy(type => type.Name);
scanner.WithDefaultConventions();
});
Который потом правильно прописывается
ISerializer (...ISerializer)
Scoped as: Transient
JsonSerializer Configured Instance of ...JsonSerializer
BsonSerializer Configured Instance of ...BsonSerializer
И так далее.
В настоящее время единственный способ выяснить, как разрешить сериализатор, который я хочу, это жестко закодировать вызов местоположения службы с помощью
jsonSerializer = ObjectFactory.GetNamedInstance<ISerializer>("JsonSerializer");
Теперь я знаю в своем классе, что мне конкретно нужен jsonSerializer, поэтому есть ли способ настроить правило или подобное, которое говорит для ISerializer для подключения именованного экземпляра на основе имени свойства? Чтобы я мог иметь
MySomeClass(ISerializer jsonSerializer, ....)
И StructureMap правильно разрешить этот сценарий? Или я подхожу к этому неправильно, и, возможно, я должен просто зарегистрировать конкретный тип, который реализует ISerializer, а затем просто специально использовать
MySomeClass(JsonSerializer jsonSerializer, ....)
что-то в этом роде с конкретным классом?