我收到了错误:
'Namespace.A'不包含'MyObjectInterface'的定义,也没有扩展方法'MyObjectInterface'接受类型的第一个参数...
代码如下:
public abstract class Base
{
public IObject MyObjectInterface { get; set; }
}
public class A : Base
{
/**/
}
public class Implementation
{
public void Method()
{
Base obj = new A();
obj.MyObjectInterface = /* something */; // Error here
}
}
IObject在单独的程序集中定义,但是:
在尝试设置MyObjectInterface之前投射到A不起作用
我已经尝试了我能想到的一切。在我失去更多头发之前请帮忙。
修改的 我也无法通过创建测试应用程序来重现错误,这就是为什么我在这里以及为什么我感到沮丧。
@Reed Copsey:/ * something * /是NUnit.DynamicMock(IMailer).MockInstance或我创建的Fake对象,它继承自IObject并只返回固定值。
@Preet Sangha:我检查过,没有其他被引用的程序集有一个IObject的定义(具体来说,它被称为IMailer)。
事情就是intellisense拿起了属性,但是当我编译时,我得到了CS0117。我甚至可以在实现中“转到定义”,它将我带到我定义它的位置。
答案 0 :(得分:3)
当您引用使用另一个程序集中定义的类型的程序集并且您没有引用依赖项的依赖项时,该错误与您获得的错误有些一致。
要解决此问题,请添加对包含IObject
的程序集的引用,作为对包含Implementation
的项目的引用。
这是一个小图。如果Assembly2公开了Assembly3中定义的类型,那么ASsembly1也必须引用Assembly3。以下情况不起作用:
_____________ _____________ _____________
| Assembly1 |references | Assembly2 |references | Assembly3 |
| -|------------|-> -|--------------|-> |
| | | public | | IObject |
| | | IObject | | |
| | | | | |
------------- ------------- -------------
当Assembly3中定义的类型可通过Assembly2访问时,这只是一个问题。这将是以下情况之一:
您需要从Assembly1添加对Assembly3的引用以使其编译。
_____________ _____________ _____________
| Assembly1 |references | Assembly2 |references | Assembly3 |
| -|------------|-> -|--------------|-> |
| | | public | | IObject |
| |references | IObject | | |
| -|------------|------------|--------------|-> |
| | | | | |
------------- ------------- -------------