У меня есть приложение, в котором класс 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;
}
}
Поскольку теперь строки подключения будут удалены из файлов конфигурации, я не уверен, как зарегистрировать мой класс репозитория.
Заранее спасибо