Виндзор IOC в консольном приложении - PullRequest
1 голос
/ 06 июня 2011

Я работаю над консольным приложением и хочу использовать замок Виндзор для ди. У меня есть следующий код в моем методе Main для консольного приложения -

private static IWindsorContainer container;
static void Main(string[] args)
{
    container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
...

Вот мой файл конфигурации -

<configSections>
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
  </configSections>

  <castle>
    <components>
      <component
        id="myrepository"
        service="_123App.Repositories.IMyRepository, _123App"
        type="_123App.Repositories.MyRepository, _123App"
      />
    </components>
  </castle>

при запуске приложения я получаю следующую ошибку -

Could not convert from '_123App.Repositories.MyRepository, _123App' to System.Type - Maybe type could not be found

Кто-нибудь знает, что здесь может происходить? Я использовал отражатель, чтобы убедиться, что имена сборок верны и все там, где и должно быть. Спасибо за любые мысли.

РЕДАКТИРОВАТЬ - Вот целая трассировка стека исключений -

Castle.MicroKernel.SubSystems.Conversion.ConverterException was unhandled
  Message=Could not convert from '_123App.Repositories.MyRepository, 123App._123App' to System.Type - Maybe type could not be found
  Source=Castle.Windsor
  StackTrace:
       at Castle.MicroKernel.SubSystems.Conversion.TypeNameConverter.PerformConversion(String value, Type targetType) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\TypeNameConverter.cs:line 91
       at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion(String value, Type targetType) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\DefaultConversionManager.cs:line 134
       at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion[TTarget](String value) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\DefaultConversionManager.cs:line 162
       at Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container, IConversionManager converter) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:line 196
       at Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer container, IConfigurationStore store) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:line 52
       at Castle.Windsor.WindsorContainer.RunInstaller() in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 314
       at Castle.Windsor.WindsorContainer..ctor(IConfigurationInterpreter interpreter) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 87
       at _123App.Program.Main(String[] args) in C:\Users\Username\Documents\Visual Studio 2010\Projects\_123App\_123App\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

1 Ответ

5 голосов
/ 07 июня 2011

Немедленное исправление должно было бы сделать так, чтобы _123App.dll (или _123App.exe) попал в выходную директорию вашего проекта.

В более отдаленной перспективе не используйте XML и не регистрируйте компонентв коде.

...