在我的ASP.NET-MVC应用程序中,我试图设置涡轮机。
初始化代码如下:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
    }
}

然后,我有一组可与以下一家相媲美的注册服务商:

public class UserRepositoryRegistration : IServiceRegistration
{
    public void Register(IServiceLocator locator)
    {
        locator.Register<IUserRepository, Db4oUserRepository>();
    }
}

如果我尝试运行,我会在SetLocatorProvider之后的某个地方获得以下错误,但是在输入任何寄存器方法之前:

服务器错误中的“/”应用程序中的错误。

无法加载一种或多种请求类型。检索LoadereXceptions属性以获取更多信息。

描述:执行当前Web请求期间发生了一个未经治疗的异常。请查看堆栈跟踪,以获取有关该错误以及代码中何处的更多信息。

异常详细信息:System.Reflection.ReflectionTypeloadexception:无法加载一种或多种请求类型。检索LoadereXceptions属性以获取更多信息。

源错误:执行当前Web请求期间生成了一个未经治疗的异常。可以使用下面的异常堆栈跟踪来识别有关异常的原点和位置的信息。

堆栈跟踪:

    [ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
       System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0
       System.Reflection.Assembly.GetTypes() +105
       MvcTurbine.ComponentModel.DefaultAutoRegistrator.AutoRegister(ServiceRegistration serviceRegistration) +338
       MvcTurbine.Web.RotorContext.ProcessAutomaticRegistration(AutoRegistrationList registrationList) +155
       MvcTurbine.Web.RotorContext.AutoRegistrationForContext() +163
       MvcTurbine.Web.RotorContext.Turn() +37
       MvcTurbine.Web.TurbineApplication.ExecuteContext() +43
       MvcTurbine.Web.TurbineApplication.TurnRotor() +65
       MvcTurbine.Web.TurbineApplication.Application_Start(Object sender, EventArgs e) +85

更新
将问题库缩小到db4objects.db4o.linq.dll,一旦我将此库作为参考(甚至不使用”,只是添加到引用中),我在我的MVC webapplication中引用的一个库中,我得到了我得到的。上面提到的ysod。所有其他DB4O库都可以正常工作。

MettreàJour
尝试将UnityServiceLocator与Windsosservicelecator和NinjectserviceLocator交换。完全相同的结果,因此问题可能并非源于两个LIB。

对方
要重新创建错误页面,就可以采取以下步骤了:

  • 创建新的MVC应用程序(无关WAT版本)
  • alter gloabal.asax.cs代码使用mvcturbine并添加所需的mvcturbine libs
    您会发现一切仍然按预期工作
  • 添加db4objects.db4o.dll
    一切仍然有效
  • 添加db4objects.db4o.linq.dll
    ysod

关于在何处以及如何调试的任何想法?

有帮助吗?

解决方案

为了写下正确的答案。我认为您得到的是由未能加载由DB4Objects.db4o.linq引用的汇编触发的Typeloadexception。

在Ildasm中查看它,表明它需要以DB4O运输的以下组件(使用与DB4Objects.db4o.linq相同的组件来避免任何不匹配)。

这些组件是:

  • 单核
  • Cecil.Flowanalysis

根据记录,ABD截至今天,LINQ将其用于DB4O查询优化器来分析LINQ查询中的属性访问。

其他提示

为了使涡轮机注册您的类型,它需要具有托管组件(db4objects.db4o.linq)和托管程序集可能会引用的任何其他组件。

您的原始帖子中的堆栈跟踪说,当试图解决应用程序的类型时,事情无法解决,在这种情况下,它不存在。

听起来您的目标类型是一个问题。您可以尝试以下操作:

  1. 删除所有服务注册,然后一次尝试一次,以确定引起问题的类型。
  2. 确保您可以成功实例化目标类型。
  3. 验证目标类型在服务注册中没有任何其他依赖项。

看到目标类型的声明和构造函数将很有帮助。

尝试切换到另一个IOC容器:

将引用添加到mvcturbine.ninject.dll

然后:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        //ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
        ServiceLocatorManager.SetLocatorProvider(() => new NinjectServiceLocator()); 
    }
}

Jeff,MVC涡轮机当前仅支持MVC 1.0,我正在为.NET 3.5和.NET 4.0获得MVC 2.0的支持。请检查 http://turbineproject.com 有关何时发布的信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top