У меня возникла проблема с внедрением объекта в его реализованный интерфейс. В разных сборках интерфейсы также используют Generics.Объект кастинга для реализованных интерфейсов
У меня 3 библиотеки. контрактов (интерфейс) Место Реализация (Интерфейс Реализация) MainAssembly (Случаются быть приложение ASP.NET MVC5)
Основные референции контракты и Реализации. Реализации ссылок Контракты.
Контракты Содержат 2 Интерфейсов, один использует общее, который имеет другого типа интерфейса
public interface IConfig{}
public interface IStore<TConfig> where TConfig : IConfig{}
Реализация Содержит 2 классов, реализующие эти интерфейсы, как это.
public class ConfigBase : IConfig {}
public class Store<TConfig> :IStore<TConfig> where TConfig : ConfigBase {}
ASP.NET приложение имеет класс, который наследуется от класса ConfigBase
public class Configuration : ConfigBase {}
В договорах библиотеки, есть класс обслуживания, который содержит метод, который требует тип Istore
public void DoSomething(IStore<IConfig> store){}
Однако Передача в виде магазина говорит мне, что он не может его преобразовать. Здесь происходит ошибка времени компиляции, все, что нужно для правильной сборки.
Store<Configuration> store = new Store<Configuration>();
serviceObj.DoSomething(store);
Для того, чтобы работать, вы должны были бы сделать '' TConfig' в IStore' ковариант. https://msdn.microsoft.com/en-us/library/dd799517(v=vs.110).aspx – juharr
Ahh, Спасибо, мне просто нужно было изменить IStore на IStore –
Обратите внимание, что вы должны делать это только если 'TConfig' используется только как выход (возврат методов и свойств только для чтения), а не как вход (аргументы метода и свойства записи) в' IStore'. – juharr