Как зарегистрировать тип с помощью PARAMETER-конструктора?
Как я зарегистрирую тип в контейнере, где тип не имеет конструктора NO PARAMETER.
Фактически, мой конструктор принимает строку, и я обычно передаю строку, представляющую Path.
Итак, когда я его разрешаю, он автоматически создает новый тип, но передает строку?
Ответы
Ответ 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, каждый из которых использует свою собственную строку соединения для разных баз данных.