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

Nei*_*ell 5 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"/>
Run Code Online (Sandbox Code Playgroud)

我从http://www.castleproject.org/container/documentation/v1rc3/usersguide/genericssupport.html上的Windsor文档中得到了这个.

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

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息: 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(()=> new WindsorServiceLocator(windsor));

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

任何人都可以对此有所了解吗?我确信Castle Windsor的升级是造成它的原因 - 它已经很好地运行了很长时间.

更新:
我最终自己修好了.请参阅下面的答案了解详情.

Nei*_*ell 8

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

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

public class BasicRepository<TEntity> : IBasicRepository<TEntity>
    where TEntity : class
{
Run Code Online (Sandbox Code Playgroud)

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

public interface IBasicRepository<T>
{
Run Code Online (Sandbox Code Playgroud)

我更新了匹配的界面:

public interface IBasicRepository<T>
    where T : class
{
Run Code Online (Sandbox Code Playgroud)

现在一切正常.

希望这有助于某人.:)