“身体签名和方法实施中的声明不匹配”

时间:2013-08-13 09:47:18

标签: entity-framework asp.net-mvc-4 .net-4.5

更新:我想我已经从这个等式中消除了Unity。有关详细信息,请参阅下文。

更新2:我想我可能已经取消了实体框架。有关详细信息,请参阅下文。

我有一些代码正在构建一个统一容器,但它开始失败,上面的错误消息突然出现了。它适用于其他人的机器,但不适用于我的机器。我删除了解决方案所在的文件夹并刷新了源代码控制中的所有内容,以确保我没有任何可能导致问题的内容(例如,重复的程序集位于上一个版本中)。

以下是我的代码的一部分:

public static class UnityBootstrapper
{
    public static IUnityContainer Initialise()
    {
        Trace.WriteLine("UnityBootstrapper.Initialise()");
        var container = BuildUnityContainer();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
        return container;
    }

    private static IUnityContainer BuildUnityContainer()
    {
        Trace.WriteLine("UnityBootstrapper.BuildUnityContainer()");
        var container = new UnityContainer();

        // Other dependencies are registered here

        // If the following line is commented out the container is build
        // but, obviously, it won't resolve this dependency.
        container.RegisterType<IUserAccessEntities, UserAccessEntities>(WebRequestLifetime);

        // Other dependencies are registered here

        return container;
    }

代码显然在调用BuildUnityContainer()时失败,我可以看到我放在该方法中的trace语句永远不会显示。

但是,如果我注释掉注册UserAccessEntities类的行(这是从Entity Framework 5生成的代码),那么就构建了容器。当然,当我要求这种依赖时,它无法解决它,因此代码在其他地方失败了。

我已经用Google搜索了解决方案,他们似乎都解决了泛型并将泛型类型从方法转移到类级别。我不能这样做,因为EF5创建了类,它将泛型放在属性上。 e.g

 DbSet<MyTable> Tables { get; set; }

我能想到的另一件事就是我从EF5生成的类中提取了一个名为IUserAccessEntities的接口,问题就在那里......但是我用ReSharper来生成它,所以它应该完全一致。

更新

为了从等式中消除Unity,我试图自己新建UserAccessEntities

    private static void TestUae()
    {
        var uae = new UserAccessEntities(); //container.Resolve<IUserAccessEntities>();
        Trace.WriteLine("Got the entities: " + uae);
    }

TestUae()的调用失败了。

更新2

我根据之前提取的界面创建了一个新类AlternativeEntities。当我尝试直接构造它时,它有一个新的例外:Method 'Set' in type 'AlternativeEntities' from assembly 'UserAccess.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.

然而,确实如此。有两个叫做set的方法,我给出了一个基本的实现方法:

public class AlternativeEntities : IUserAccessEntities
{
    public DbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        Trace.WriteLine("public DbSet<TEntity> Set<TEntity>() where TEntity : class");
        return null;
    }

    public DbSet Set(Type entityType)
    {
        Trace.WriteLine("public DbSet Set(Type entityType)");
        return null;
    }
// Other methods and properties here.
}

0 个答案:

没有答案