2009-04-19 102 views
3

即使解决方案如此明显,我应该从未发布过这个消息,我将它作为提醒和对其他人的参考。为什么我会在调用ContextRegistry.GetContext()时从Spring.NET中引发异常?

我有我的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是我想要实例化的类的全限定名。我猜测这是我错了,但看不到。

回答

4

我感觉这么傻。

这是因为我没有将AlbumLibrary.dll复制到正确的输出目录。这意味着Spring无法找到它 - 即使在我解决了Kent强调的程序集名称问题之后。

+0

我有这个完全相同的问题,因为我的项目输出指向不同的位置。更改项目以将dll输出到相同的目录为我修复了一切 – lomaxx 2009-04-29 05:09:38

0

您应该使用塔id属性,而不是name

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

而且它应该是config://spring/objects而不是config://spring/obects

您需要仔细检查在AlbumLibraryWPF程序集中定义的AlbumLibraryWPF名称空间中是否有称为AlbumLibrary的类型。

+0

都能跟得上! - ID仍然会导致异常被抛出 – ChrisF 2009-04-19 18:03:24

+0

第二个是一个错字 - 我试图将代码剪切并粘贴,但Firefox声称我需要一个插件能够看到内容 - 所以我再次输入。 – ChrisF 2009-04-19 21:22:03

1

逗号后面的名称应该是程序集名称,它不一定与名称空间名称相同。

+0

差不多 - 这是因为我忘记将AlbumLibrary dll复制到正确的输出目录。 – ChrisF 2009-04-19 18:08:39

-1

您可以尝试更改类型。类型=“AlbumLibraryWPF.AlbumLibrary,AlbumLibraryWPF”,第一个参数表示名称空间,第二个参数(点后面)表示解决方案名称。

  • “AlbumLibraryWPF.AlbumLibrary”= NameSapce名称
  • “AlbumLibraryWPF”=溶液名称
-1
  1. 打开VS2012或VS2010具有管理员权限
  2. 配置:类型=“namespace.type,组装“

然后再次尝试运行您的解决方案。

0

我得到这个错误是因为错误的是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

相关问题