Autofa c Builder Проблемы с регистрацией в репозитории - PullRequest
0 голосов
/ 17 января 2020

У меня есть приложение, в котором класс Repository принимает ISessionFactory в качестве параметра. Я знаю строку подключения из файлов конфигурации и строю фабрику сеанса из строки подключения.

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

Использую Nhibernate и Autofa c для регистрации. Я прилагаю код

builder.Register(c => BuildSessionFactory())
       .SingleInstance()
       .Named<ISessionFactory>("sessionFactory");

private static ISessionFactory BuildSessionFactory()
{
    //reads from the connection string and i build session factory here
    return BuildFactory(ConfigurationManager.ConnectionStrings["Db"].ConnectionString)
           .BuildSessionFactory();

}
builder.RegisterGeneric(typeof(NHibernate.Repository<>))
       .As(typeof(ISessionRepository<>))
       .WithParameter(ResolvedParameter.ForNamed<ISessionFactory>("sessionFactory"))
       .SingleInstance()
       .Named("Decorator", typeof(ISessionRepository<>));

builder.RegisterGenericDecorator(
    typeof(NHibernate.Repository<>), 
    typeof(ISessionRepository<>), 
    "Decorator");


public class Repository<T> : ISessionRepository<T> where T : class
{
    private readonly ISessionFactory _sessionFactory;

    public Repository(ISessionFactory sessionFactory)
    {
        if (sessionFactory == null)
        {
            throw new ArgumentNullException(nameof(sessionFactory));
        }
        _sessionFactory = sessionFactory;
    }
}

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

...