Static member variable garbage collection?

In an effort to remove dependencies on any persistence support libraries (such as NHibernate) in the UI layer, I wrote this simple repository. It seems to work just fine, but what I want to know is, will the static variable, sessionFactory, be disposed on during garbage collection when the application ends? Or will it cause a memory leak?

using System;
using System.Collections.Generic;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
namespace Library.Persistence
{
using Library.Domain.Persistence;
using Library.Persistence.Mapping;
using Library.Persistence.Mapping.Conventions;
public class Repository<T> : IRepository<T> where T : class
{
private static ISessionFactory sessionFactory;
public Repository()
{
if (sessionFactory == null)
sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromAppSetting("ConnectionString")))
.Mappings(m =>
{
m.FluentMappings.Conventions.Add<HasManyConvention>();
m.FluentMappings.Conventions.Add<PrimaryKeyConvention>();
m.FluentMappings.Conventions.Add<TableNameConvention>();
m.FluentMappings.Add<AuthorMap>();
m.FluentMappings.Add<BookMap>();
})
.BuildSessionFactory();
}
protected T WithSession(Func<ISession, T> func)
{
using (var session = sessionFactory.OpenSession()) return func(session);
}
protected IEnumerable<T> WithSession(Func<ISession, IEnumerable<T>> func)
{
using (var session = sessionFactory.OpenSession()) return func(session);
}
protected T WithTransaction(Func<ISession, T> func)
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
try
{
T t = func(session);
transaction.Commit();
return t;
}
catch
{
transaction.Rollback();
return default(T);
}
}
}
protected void WithTransaction(Action<ISession> action)
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
try
{
action(session);
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}
}
public IEnumerable<T> Select()
{
return WithSession((session) => session.CreateCriteria<T>().List<T>());
}
public T Insert(T entity)
{
return WithTransaction((session) => session.Save(entity) as T);
}
public void Update(T entity)
{
WithTransaction((session) => session.Update(entity));
}
public void Delete(T entity)
{
WithTransaction((session) => session.Delete(entity));
}
 
}
}