Почему я получаю исключение из Spring.NET при вызове ContextRegistry.GetContext ()? - PullRequest
4 голосов
/ 19 апреля 2009

Хотя решение и так очевидно, что я никогда не должен был публиковать это, я оставляю его как напоминание и полезную ссылку для других.

В моем файле app.config есть следующее:

<sectionGroup name="spring">
  <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
  <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>

Далее:

<spring>
  <context>
    <resource uri="config://spring/objects"/>
  </context>
  <objects xmlns="http://www.springframework.net">
    <object name="mediaLibrary" type="AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF"/>
  </objects>
</spring>

Тогда в моем приложении я получил:

using Spring.Context;
using Spring.Context.Support;

public partial class AlbumChecker : Window
{
    private DataTable dataTable;

    private Library library;
    private Thread libraryThread;

    public AlbumChecker()
    {
        InitializeComponent();

        CreateToolTips();

        IApplicationContext ctx = ContextRegistry.GetContext();
        library = (Library)ctx.GetObject("mediaLibrary");

        // Other initialisation
    }

    // Other code
}

Все это довольно хорошо компилируется, однако я получаю исключение при вызове GetContext ():

Error creating context 'spring.root': Could not load type from string value
'AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF'.

Я проверил документацию Spring.NET и не вижу, что я делаю неправильно, но у меня явно что-то не так, иначе это не вызовет исключения!

AlbumLibraryWPF - это пространство имен, а AlbumLibraryWPF.AlbumLibrary - полностью определенное имя класса, который я хочу создать. Я предполагаю, что это я ошибся, но не понимаю, как.

Ответы [ 6 ]

5 голосов
/ 19 апреля 2009

Я чувствую себя таким дураком.

Это потому, что мне не удалось скопировать AlbumLibrary.dll в правильный выходной каталог. Это означало, что Spring не смог его найти - даже после того, как я исправил проблему с именем сборки, которую выделил Кент.

1 голос
/ 04 мая 2014

Я получил эту ошибку, потому что по ошибке в файле app.config была опечатка [! * 2]. Как только я вынул это, ошибка ушла. что-то вроде этого

<context>
  <!--<resource uri="~//Aspects.xml"/>-->
  <!--<resource uri="~//Dao.xml"/>-->
  <!--<resource uri="~//Spring.xml"/>-->
  <resource uri="file://Spring.xml"/>
  <resource uri="file://Dao.xml"/>
</context>

! * 2

1 голос
/ 19 апреля 2009

Имя после запятой должно быть именем сборки, которое не обязательно совпадает с именем пространства имен.

0 голосов
/ 29 сентября 2012
  1. Открыть VS2012 или VS2010 с правами администратора
  2. Config: type = "namespace.type, Assembly"

Затем попробуйте запустить решение снова.

0 голосов
/ 28 ноября 2011

Вы можете попробовать изменить тип. Type = "AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF", первый параметр означает NameSpace, а второй параметр (за точкой) означает Имя решения.

  • "AlbumLibraryWPF.AlbumLibrary" = NameSapce name
  • "AlbumLibraryWPF" = название решения
0 голосов
/ 19 апреля 2009

Вы должны использовать атрибут id вместо name:

<object id="mediaLibrary" type="AlbumLibraryWPF.AlbumLibrary, AlbumLibraryWPF"/>

Также должно быть config://spring/objects вместо config://spring/obects.

Вам необходимо проверить, что у вас есть тип с именем AlbumLibrary в AlbumLibraryWPF пространстве имен, определенном в AlbumLibraryWPF сборке.

...