Класс Регистра Castle Windsor с параметрами конструктора
у меня есть следующий класс:
public class DatabaseFactory<C> : Disposable, IDatabaseFactory<C> where C : DbContext, BaseContext, new()
{
private C dataContext;
private string connectionString;
public DatabaseFactory(string connectionString)
{
this.connectionString = connectionString;
}
public C Get()
{
return dataContext ?? (dataContext = Activator.CreateInstance(typeof(C), new object[] {connectionString}) as C);
}
protected override void DisposeCore()
{
if (dataContext != null)
dataContext.Dispose();
}
}
когда я пытаюсь запустить веб-API, я получаю следующую ошибку:
Can't create component 'MyApp.DAL.Implementations.DatabaseFactory'1' as it has dependencies to be satisfied. 'MyApp.DAL.Implementations.DatabaseFactory'1' is waiting for the following dependencies:
- Parameter 'connectionString' which was not provided. Did you forget to set the dependency?
как его правильно зарегистрировать и как передать параметр во время выполнения?
2 ответов
необходимо зарегистрировать параметр конструктора:
container.Register(
Component.For<IDatabaseFactory>().ImplementedBy<DatabaseFactory>()
.DependsOn(Dependency.OnValue("connectionString", connectionString))
);
Вы можете установить зависимости Resolve()
метод путем добавления анонимного типа с именем параметра конструктора
пример:
IDatabaseFactory factory = container.Resolve<IDatabaseFactory>
(new { connectionString = connectionString });