Структурная карта с использованием профилей (версия 2.6)

ObjectFactory.Initialize(x =>
 {
 x.Scan(scan =>
 {
 scan.Assembly("CloudAssembly"); // defines profile "Cloud"
 scan.LookForRegistries();
 });

 x.Profile("Local", cfg =>
 {
 cfg.For<icloudstorage>().
 Use(() =>
 new LocalStorage(HttpContext.Current.Server.MapPath("~")));

 });
 });
</icloudstorage>

Затем я пытаюсь установить его в "Локальный" профиль, чтобы ICloudStorage разрешал LocalStorage.

ObjectFactory.Container.SetDefaultsToProfile("Local");
 ObjectFactory.Profile = "Local";

Затем я получаю это исключение при активации объекта, который зависит от ICloudStorage:

StructureMap Exception Code: 202
No Default Instance defined for PluginFamily ICloudStorage, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Я делаю что-то неправильно с профилями? Я посмотрел на вывод whatDoIHave и все выглядит так, как будто он настроен правильно.

Здесь соответствующий раздел "whatDoIHave":

ICloudStorage (MyLibrary.ICloudStorage) Default Instance for Profile Local Instance is created by Func<object> function: System.Func'2[StructureMap.IContext,MyLibrary.ICloudStorage] 
Scoped as: Transient

 Default Instance for Profile Local Instance is created by Func<object> function: System.Func'2[StructureMap.IContext,MyLibrary.ICloudStorage] 
 Default Instance for Profile Cloud Configured Instance of CloudProviders.CloudStorage, CloudProviders, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
 </object></object>
1 ответ

Я просто удалил ObjectFactory.Container.SetDefaultsToProfile("Локальный"), который я вызывал непосредственно после того, как метод Initialize использовал вместо него файл конфигурации...

<structuremap defaultprofile="Local">

 </structuremap>

И теперь он работает правильно...

licensed under cc by-sa 3.0 with attribution.