Unity Framework - PullRequest
       15

Unity Framework

2 голосов
/ 28 октября 2009

Позвольте мне прояснить вопрос, я сказал, что 100 классов, все эти 100 классов реализуют 1 интерфейс, скажем IDependency, скажем, предположим, что мое имя класса - Customer, он реализует 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 уже объявлено

Теперь мне нужно только одна строка в web.config, и я должен иметь возможность разрешать все мои классы, и я не хочу RegisterType в моем коде, например

Container.RegisterType<IDependency,Customer>();
Container.RegisterType<IDependency,Order>();

Я не хочу записывать эти строки в мой файл кода, так как все должно быть сделано через файл конфигурации.

Считаете ли вы, ребята, допустимо ли это, если да, можете ли вы хотя бы дать мне представление о том, как к нему подойти?

В целом, я думаю, что должен быть один класс, скажем BaseClass, который сначала реализует мой IDependency интерфейс, и все мои 100 классов будут наследовать этот класс, и мой конфигурационный файл должен выглядеть как

<type type="IDependency" mapTo="BaseClass"></type>

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

1 Ответ

4 голосов
/ 28 октября 2009

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

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));
...