代码之家  ›  专栏  ›  技术社区  ›  Neil Barnwell

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

  •  5
  • Neil Barnwell  · 技术社区  · 14 年前

    <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 .

    在执行过程中发生 当前web请求。请检查 有关堆栈跟踪的详细信息 密码。

    异常详细信息: System.TypeLoadException:系统类型加载异常: “MyApp.Models.Repositories.Linq.BasicRepository”“1[TEntity]”上的GenericArguments[0],“T”


    第45行:{
    第46行:var windsor=new WindsorContainer(“windsor.xml”);
    第47行:
    第48行:ServiceLocator.SetLocatorProvider(()=>新WindsorServiceLocator(温莎));

    http://sourceforge.net/projects/castleproject/files/InversionOfControl/2.1/Castle-Windsor-2.1.1.zip/download

    更新 :
    my answer 详情请参见下文。

    1 回复  |  直到 7 年前
        1
  •  8
  •   Neil Barnwell    14 年前

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

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

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

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

    public interface IBasicRepository<T>
    {
    

    public interface IBasicRepository<T>
        where T : class
    {
    

    现在一切正常。

    希望这能帮助别人。:)