“不包含定义”接口中方法的错误

时间:2014-12-03 03:14:47

标签: c# .net

我有一个像这样结构的界面

public interface IDataContextAsync : IDataContext
{
    void DisableGlobalFilter(string filterName);
}

我有一个类使用这样的界面

public class Repository<TEntity> : IRepositoryAsync<TEntity> where TEntity : class, IObjectState
{
    private readonly IDataContextAsync _context;

    public Repository(IDataContextAsync context)
    {
        _context = context;
    }

    public void DisableGlobalFilter(string filterName)
    {
        _context.DisableGlobalFilter(filterName);
    }
}

当我尝试编译时,我得到以下错误

  

&#39; Repository.Pattern.DataContext.IDataContextAsync&#39;不包含   &#39; DisableGlobalFilter&#39;的定义没有扩展方法   &#39; DisableGlobalFilter&#39;接受第一个类型的参数   &#39; Repository.Pattern.DataContext.IDataContextAsync&#39;可以找到(是   你错过了使用指令或程序集   参考?)

奇怪的是Visual Studio正确显示了智能。我也可以&#34;转到定义&#34;从类到接口正确。

1 个答案:

答案 0 :(得分:0)

公平警告:我不是C#家伙,但无论如何请考虑以下事项。

您正在尝试调用不存在的方法。

DisableGlobalFilter()IDataContextAsync界面中声明,但在任何地方都没有定义。您偶然在DisableGlobalFilter()类中遇到Repository方法的事实不会改变它:此方法调用_context.DisableGlobalFilter()_context是{{1}的实例1}},就我们通过查看您发布的代码而言,它只是一个界面。

此时,IDataContextAsync是一个抽象/纯虚方法。

您需要创建一个实际实现 IDataContextAsync::DisableGlobalFilter()接口的类(包括IDataContextAsync),然后创建该类的实例,并将此实例作为参数传递到您的DisableGlobalFilter()构造函数中,在您的帖子中未显示的代码部分。