【问题标题】:Passing the interface of a class throws errors but passing just the class works fine传递类的接口会引发错误,但仅传递类可以正常工作
【发布时间】:2011-04-13 17:28:48
【问题描述】:

我有两个班级:

缺陷控制器

public abstract class DefectsController<TDefect, TDefectService> :
    ApplicationController<DefectsController<TDefect, TDefectService>, TDefect>
    where TDefectService : IEntityService<TDefect>
    where TDefect : Defect
{
    private readonly TDefectService defectService;


    public DefectsController(TDefectService defectService)
        : base(defectService)
    {
        this.defectService = defectService;
    }
}

和 JobDefectsController(还有其他部分,这些只是示例)

public class JobDefectsController : DefectsController<JobDefect, IEntityService<JobDefect>>
{
    public JobDefectsController(EntityService<JobDefect> service)
        : base(service)
    {
    }
}

由于某种原因,如果我将 JobDefectsController 的构造函数更改为使用 IEntityService,那么如果我尝试访问 DefectsController 中的defectService,则会引发未知错误。

编辑:此错误:提供的泛型参数的数量不等于泛型类型定义的数量。
参数名称:实例化

曾经有一个名为JobDefectsService 的类继承自IEntityService&lt;JobDefect&gt;,并且它的接口(@98​​7654326@)可以用来代替IEntityService&lt;JobDefect&gt;EntityService&lt;JobDefect&gt; 而不会出现问题。

有人知道问题出在哪里吗?

谢谢,
哈罗德

【问题讨论】:

  • “引发未知错误”是什么意思?
  • 这是什么标签汤:-)
  • "提供的泛型参数的数量不等于泛型类型定义的数量。参数名称:实例化"
  • 它是在 c# 中使用 asp.net-mvc 完成的(因此是控制器和服务)并与 fluent-nhibernate 一起使用(但我不确定这是否涉及,我只是在帮助别人的项目)

标签: c# asp.net-mvc fluent-nhibernate


【解决方案1】:

您的构造函数参数和您的第二个类参数需要是相同的类型。 IE。 TDefectService.

如果你想使用接口,那么你的具体类应该定义如下......

public class JobDefectsController : DefectsController<JobDefect, IEntityService<JobDefect>>
{
    public JobDefectsController(IEntityService<JobDefect> service)
        : base(service)
    {
    }
}

要使用具体类,你需要这样做......

public class JobDefectsController : DefectsController<JobDefect, EntityService<JobDefect>>
{
    public JobDefectsController(EntityService<JobDefect> service)
        : base(service)
    {
    }
}

【讨论】:

  • 但问题是如果我使用DefectsController&lt;JobDefect, IEntityService&lt;JobDefect&gt; 然后将EntityService&lt;JobDefect&gt; 放入构造函数中它可以工作,但它不会以任何其他方式工作
  • ApplicationController 可能对 TDefectService 有限制,说它必须是一个类而不是一个接口,因为它可能需要 new() 它。应用控制器是如何定义的?
【解决方案2】:

修复了问题,IEntityService 中没有函数 QueryEntityService 中存在的问题。我没有意识到这些类是在项目中构建的,现在感觉有点傻。

哦,好吧,还是谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多