Unity Framework

2

Позвольте мне уточнить с моим Вопросом, я скажу, что 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>

Пожалуйста, дайте мне знать, если вам нужно больше разъяснений по этому поводу, потому что я действительно поражен этим

Теги:
frameworks
web-config
unity-container

1 ответ

4

Вы не можете зарегистрировать один и тот же интерфейс для двух классов одновременно. В вашем примере кода:

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));
  • 0
    Но в файле конфигурации, если у меня есть 100 классов, я должен написать 100 строк сопоставления прямо как <type type = "IDependency" mapTo = "Customer"> </ type> и <type type = "IDependency" mapTo = "Order" name = "Order"> </ type> я ищу решение, где мой файл COnfig будет иметь только 1 строку
  • 0
    Но вы используете только 1 отображение одновременно, верно? Затем в конфигурационном файле всего одна строка и измените имя класса соответствующим образом.
Показать ещё 3 комментария
Сообщество Overcoder
Наверх
Меню