внедрение строк соединения в разрешенные классы DI - PullRequest
5 голосов
/ 05 мая 2011

Я использую Castle для создания контекста базы данных на основе заданного интерфейса. У меня есть следующий код в моем классе установщика, и на данный момент он работает нормально.

private ConfigureDelegate ConfigureContext()
{
    return p => p.Named(p.ServiceType.Name)
        .LifeStyle.PerWebRequest
        .DependsOn(new { connectionString = ConfigurationManager.ConnectionStrings["conStringName"].ConnectionString });
}

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

Возможно ли это, если так, может ли кто-нибудь направить меня в правильном направлении.

ТИА

1 Ответ

6 голосов
/ 05 мая 2011

Да, это возможно, если вы можете написать фрагмент кода, который предоставляет имя строки подключения для службы. Возможно, что-то вроде этого:

private ConfigureDelegate ConfigureContext()
{
    return p => p.Named(p.ServiceType.Name)
        .LifeStyle.PerWebRequest
        .DependsOn(new
        {
            connectionString =
                ConfigurationManager
                    .ConnectionStrings[GetConnectionName(p.ServiceType.Name)]
                    .ConnectionString
        });
}

private string GetConnectionName(string serviceName)
{
    // return the connection name
}
...