Как зарегистрировать тип с помощью конструктора PARAMETER? - PullRequest
29 голосов
/ 23 октября 2010

Как мне зарегистрировать typetype в контейнере, в котором тип не имеет конструктора NO PARAMETER.

На самом деле мой конструктор принимает строку, и я обычно передаю строку, которая представляет путь.

Так что, когда я все же решаю, он автоматически создает новый тип, но передает строку?

Ответы [ 2 ]

55 голосов
/ 24 октября 2010

Все просто. Когда вы регистрируете конструктор, вы просто передаете значение, которое вы хотите ввести для параметра. Контейнер соответствует вашему конструктору на основе типа значения (API) или имени параметра (XML).

В API вы должны сделать:

container.RegisterType<MyType>(new InjectionConstructor("My string here"));

Это выберет конструктор, который принимает одну строку, и во время разрешения передаст строку «Моя строка здесь».

Эквивалентный XML (с использованием схемы конфигурации 2.0) будет:

<register type="MyType">
  <constructor>
    <param name="whateverParameterNameIs" value="My string here" />
  </constructor>
</register>
16 голосов
/ 25 ноября 2011

Вы также можете использовать встроенный InjectionConstructor и ResolvedParameter, где connectionString - строка подключения к базе данных, которую нужно использовать.

// install a named string that holds the connection string to use
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager()); 

// register the class that will use the connection string
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString")));

var context = container.Resolve<MyNamespace.MyObjectContext>();

Вы можете сделать это еще на один шаг дальше и иметь несколько именованных экземпляров MyObjectContext, каждыйиспользуя собственную строку подключения к различным базам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...