Код исключения StructureMap: 202 Нет значения по умолчанию для модуля PluginFamily
Я новичок в StructureMap. Я скачал и
используя версию 2.6.1.0. Я продолжаю получать ниже
Ошибка:
Код исключения StructureMap: 202 Нет Экземпляр по умолчанию, определенный для PluginFamily Company.ProjectCore.Core.IConfiguration, Company.ProjectCore, Version = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null
My Global.asax.cs выглядит так:
protected void Application_Start(object sender, EventArgs e)
{
var container = new Container(x =>
{
x.For<ICache>().Use<Cache>();
x.For<IEmailService>().Use<EmailService>();
x.For<IUserSession>().Use<UserSession>();
x.For<IRedirector>().Use<Redirector>();
x.For<INavigation>().Use<Navigation>();
});
container.AssertConfigurationIsValid();
}
Я изменил с ObjectFactory.Initialize на "новый контейнер" для отладки.
При переходе через метод AssertConfigurationIsValid() кеш
работает, но EmailService не работает с методом GetInstance в
следующая строка:
[Pluggable("Default")]
public class EmailService : IEmailService
private readonly IConfiguration _configuration;
public EmailService()
{
_configuration = ObjectFactory.GetInstance<IConfiguration>();
}
Если я удалю IEmailService, в IUserSession будет сброшена ошибка 202.
Должен ли я добавлять что-то еще в Application_Start или в мои файлы классов?
Спасибо заранее...
Ответы
Ответ 1
Эта проблема была устранена заменой ObjectFactory.Initialize
на ObjectFactory.Configure
и добавлением сборок в мой проект:
ObjectFactory.Configure(x =>
{
x.Scan(scan =>
{
scan.LookForRegistries();
scan.Assembly("MyAssembly");
scan.Assembly("MyAssembly");
});
});
Ответ 2
Я получал то же сообщение об ошибке, но по другой причине. У меня был класс Foo, который определил два таких конструктора:
public class Foo : IFoo
{
private Bar _bar;
public Foo()
{
_bar = new Bar();
}
public Foo(Bar bar)
{
_bar = bar;
}
}
и моя конфигурация StructureMap была такой:
For<IFoo>.Use<Foo>();
Я продолжал получать сообщение об ошибке, например
202 Нет значения по умолчанию для бара
Проблема заключалась в том, что StructureMap пытался построить Foo, используя конструктор, который принимает параметр, вместо использования конструктора по умолчанию без параметров. Я решил это, используя ответ в Как определить конструктор по умолчанию с помощью метода StructureMap? так:
For<IFoo>.Use(() => new Foo());
Ответ 3
Где вы загрузите конкретный класс IConfiguration?
то есть:
x.For<IConfiguration>().Use<Configuration>();
Ответ 4
Я видел ту же ошибку. В моем случае у меня была опечатка в имени реализации, поэтому имена интерфейса и реализации не совпадали.
public class FooTypo : IFoo
Где я должен был:
public class Foo : IFoo
Ответ 5
Еще одна вещь, которую нужно искать, - убедиться, что зависимость (класс), которую вы вводите, общедоступна. Если класс является внутренним, это может вызвать эту проблему.
Ответ 6
Когда я получил эту ошибку, это произошло потому, что я забыл отметить мой класс public
. Это просто.
Ответ 7
У меня также была эта проблема, когда я использовал Visual Studio 2015 с NCrunch.
Все, что вам нужно сделать, это переключить параметр true в пункт меню конфигурации в разделе "NCrunch". Переключение инициализации на конфигурацию не помогло мне.
Параметр находится в разделе "Настройки сборки", он называется "Копировать ссылочные сборки в рабочее пространство"