Предположим, существует сторонняя сборка ThirdPartyAssembly.dll
, которая предоставляет следующее:
namespace ThirdPartyAssembly
{
public interface IThirdParty
{
void GetInstance(ThirdPartyInfo info);
}
public class ThirdPartyInfo
{
public ThirdPartyInfo(string instanceText);
public string InstanceText { get; set; }
}
}
В одном из проектов решения MyAssembly
я ссылаюсь ThirdPartyAssembly.dll
и реализую следующий код:
namespace MyAssembly
{
public abstract class AbstractMyClass1 : IThirdParty
{
void IThirdParty.GetInstance(ThirdPartyInfo info)
{
info.InstanceText = "some-text";
}
}
public abstract class AbstractMyClass1Consumer<T>
where T : AbstractMyClass1
{
}
}
Во втором проекте решения MyAssemblyConsumer
Я ссылаюсь MyAssembly
(в качестве ссылки на проект решения) и реализую следующее классифицированное
namespace MyAssemblyConsumer
{
class MyClass1 : AbstractMyClass1
{
}
class MyClass1Consumer : AbstractMyClass1Consumer<MyClass1>
{
}
}
Пока все компилируется нормально.Однако, когда я добавляю IMyClass2
в MyAssembly
проект, который наследует IThirdParty
интерфейс со следующими абстрактными классами
namespace MyAssembly
{
public interface IMyClass2 : IThirdParty
{
}
public abstract class AbstractMyClass2 : IMyClass2
{
void IThirdParty.GetInstance(ThirdPartyInfo info)
{
info.InstanceText = "some-text";
}
}
public abstract class AbstractMyClass2Consumer<T>
where T : IMyClass2
{
}
}
, и пытаюсь реализовать следующие классы в MyAssemblyConsumer
namespace MyAssemblyConsumer
{
class MyClass2 : AbstractMyClass2
{
}
class MyClass2Consumer : AbstractMyClass2Consumer<MyClass2>
{
}
}
Я получаю следующую ошибку компиляции на MyClass2Consumer
:
Тип 'IThirdParty' определен в сборке, на которую нет ссылок.Вы должны добавить ссылку на сборку "ThirdPartyAssembly"
Вопрос, почему мне не нужно ссылаться на ThirdParty.dll в первом случае, но нужна ли эта ссылка во втором случае?