Castle Windsor升级导致泛型类型的TypeLoadException

时间:2010-06-02 22:59:01

标签: c# castle-windsor

我在Castle Windsor xml文件中有以下映射,该文件在一段时间内工作正常(未更改):

<component id="defaultBasicRepository"
           service="MyApp.Models.Repositories.IBasicRepository`1, MyApp.Models"
           type="MyApp.Models.Repositories.Linq.BasicRepository`1, MyApp.Models"
           lifestyle="perWebRequest"/>

我是从http://www.castleproject.org/container/documentation/v1rc3/usersguide/genericssupport.html的Windsor文档中得到的。

自从我升级Windsor以来,我现在在运行时遇到以下异常:

  

说明:未处理的异常   在执行期间发生   当前的网络请求。请查看   堆栈跟踪以获取更多信息   错误及其来源   代码。

     

例外详情:   System.TypeLoadException:   GenericArguments [0],'T','MyApp.Models.Repositories.Linq.BasicRepository`1 [TEntity]'   违反了类型参数'TEntity'的约束。

     

来源错误:

     

第44行:public static void ConfigureIoC()
  第45行:{
  第46行:var windsor = new WindsorContainer(“Windsor.xml”);
  第47行:
  第48行:ServiceLocator.SetLocatorProvider(()=&gt; new WindsorServiceLocator(windsor));

我正在使用从http://sourceforge.net/projects/castleproject/files/InversionOfControl/2.1/Castle-Windsor-2.1.1.zip/download下载的ASP.NET MVC 1.0,Visual Studio 2008和Castle Windsor

任何人都可以对此有所了解吗?我确信温莎城堡的升级是造成它的原因 - 它已经很好地运作了很长时间。

更新
我最后自己修好了。有关详细信息,请参阅下面的my answer

1 个答案:

答案 0 :(得分:8)

通过比较映射中的所有类/接口,我最终找到了自己的答案。

答案是BasicRepository的泛型类型参数具有如下通用约束:

public class BasicRepository<TEntity> : IBasicRepository<TEntity>
    where TEntity : class
{

...但它实现的接口没有相同的约束:

public interface IBasicRepository<T>
{

我更新了匹配的界面:

public interface IBasicRepository<T>
    where T : class
{

现在一切正常。

希望这有助于某人。 :)