Позвольте мне уточнить с моим Вопросом, я скажу, что 100 классов, все эти 100 классов реализуют 1 интерфейс, говорят о зависимости, скажем, предположим, что мое имя класса является Customer it реализует IDependency
public class Customer : IDependency
public class Order:IDependency
он продолжается до 100 классов
И я регистрирую этот класс в web.config как
<type type="IDependency" mapTo="Customer"></type>
<type type="IDependency" mapTo="Order"></type>
это будет неправильно, потому что я получаю сообщение об ошибке IDependency
уже объявлено
Теперь то, что мне нужно, должно быть только 1 строка в web.config, и я должен иметь возможность разрешать все мои классы, и я не хочу RegisterType
в моем коде, например
Container.RegisterType<IDependency,Customer>();
Container.RegisterType<IDependency,Order>();
Я не хочу писать эти строки в моем кодовом файле, так как все это нужно делать через файл конфигурации.
Вы, ребята, думаете, что это действительно, если да, вы можете хотя бы дать мне представление, как подойти к нему.
В целом, я думаю, что должен быть 1 класс, скажем BaseClass
, который реализует мой IDependency
интерфейс сначала, и все мои 100 классов наследуют этот класс, а мой файл конфигурации должен быть как
<type type="IDependency" mapTo="BaseClass"></type>
Пожалуйста, дайте мне знать, если вам нужно больше разъяснений по этому поводу, потому что я действительно поражен этим
Вы не можете зарегистрировать один и тот же интерфейс для двух классов одновременно. В вашем примере кода:
Container.RegisterType<IDependency,Customer>();
Container.RegisterType<IDependency,Order>();
то, что сделает контейнер Unity, это зарегистрировать Order
как возвращаемый класс при вызове Resolve<IDependency>
и забыть о предыдущей регистрации класса Customer
.
В любом случае я не совсем понимаю, какова ваша цель. Если бы вы могли зарегистрировать несколько классов для одного и того же интерфейса, что бы вы ожидали получить при вызове Resolve<IDependency>
, или что бы вы ожидали получить классы, имеющие параметр IDependency
в конструкторе?
РЕДАКТИРОВАТЬ на основе пояснения от Dotnet Coder:
Если все, что вы хотите, должно решить во время выполнения, какой класс вы хотите зарегистрировать на основе конфигурации, вы можете иметь одно значение в файле конфигурации (web.config, Settings и т.д.), указывающее, какой класс вы хотите связать. Например:
string className = Settings.Default["IDependencyClassName"]; //just an example, can use web.config or other config system as well
Container.RegisterType(typeof(IDependency), Type.GetType(className));