Я недавно наткнулся на нечетную проблему, которую я не мог объяснить, и я был бы рад, если бы кто-нибудь мог прояснить, почему это происходит.Ошибка создания экземпляра объекта при использовании перегруженного конструктора
Проблема я столкнулся заключается в следующем:
У меня есть интерфейс, который реализуется, например, так:
namespace InterfaceTwo
{
public interface IA { }
}
namespace InterfaceTwo
{
public class A : IA { }
}
И еще один интерфейс, который реализуется в другом проекте, например, так:
namespace InterfaceOne
{
public interface IB { }
}
namespace InterfaceOne
{
public class B : IB { }
}
у меня есть объект, который использует эти интерфейсы в его конструкторам, так как:
using InterfaceOne;
using InterfaceTwo;
namespace MainObject
{
public class TheMainObject
{
public TheMainObject(IA iaObj) { }
public TheMainObject(IB iaObj) { }
}
}
И, наконец, у меня есть класс, который объединяющую выше объект, например так:
using InterfaceTwo;
using MainObject;
namespace ReferenceTest
{
public class ReferenceTest
{
public void DoSomething()
{
var a = new A();
var theMainObject = new TheMainObject(a);
}
}
}
Как ни странно, этот код не будет компилироваться со следующей ошибкой:
The type 'InterfaceOne.IB' is defined in an assembly that is not referenced.
You must add a reference to assembly 'InterfaceOne, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
c:\users\harry.baden\documents\visual studio 2013\Projects\ReferenceTest\ReferenceTest\ReferenceTest.cs 11 13 ReferenceTest
Я также что если я изменю одну из перегрузок, чтобы содержать дополнительный параметр - он компилируется ... Что заставило меня думать, что проблема может быть связана с какой-то проблемой отражения, с которой работает компилятор.
Thanks,
Barak.
щелкните правой кнопкой мыши проект и убедитесь, что сборка правильно указана путем добавления ссылки на файл-> перестроить и посмотреть, что произойдет. – maximdumont
Вам необходимо добавить ссылку в свой исследовательский проект для визуальных студий (в рамках тестового проекта) в файл сборки, созданный от интерфейсаOne. Смотрите здесь: https://msdn.microsoft.com/en-us/library/7314433t%28v=vs.90%29.aspx – ZivS
Это не проблема ссылок, поскольку я не хочу, чтобы ReferenceTest знал о интерфейс IB или класс B. Я также упомянул об этом: «Я также обнаружил, что если я изменю одну из перегрузок, чтобы добавить дополнительный параметр - он компилируется ...». Я предполагаю, что проблема связана с тем, что одна из перегрузок с одинаковым количеством параметров имеет IB в ней, и поэтому при компиляции ей также нужно знать IB. – BarakH