Подтвердить что ты не робот

Как зарегистрировать тип с помощью PARAMETER-конструктора?

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

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

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

4b9b3361

Ответ 1

Это просто. Когда вы регистрируете конструктор, вы просто передаете значение, которое вы хотите ввести для параметра. Контейнер соответствует вашему конструктору на основе типа значения (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>

Ответ 2

Вы также можете использовать встроенный 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, каждый из которых использует свою собственную строку соединения для разных баз данных.