Skip to content

Instantly share code, notes, and snippets.

View dealproc's full-sized avatar

Richard Bennett dealproc

View GitHub Profile
@dealproc
dealproc / Dockerfile
Created October 24, 2018 07:47
Docker for dotnet core 2.1 with mono
FROM jetbrains/teamcity-agent
ENV MONO_VERSION 5.4.1.6
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
RUN apt install apt-transport-https
RUN echo "deb http://download.mono-project.com/repo/ubuntu stable-xenial main" | tee /etc/apt/sources.list.d/mono-official-stable.list \
&& apt-get update \
@dealproc
dealproc / ITenantAccessor.cs
Last active March 17, 2019 06:54
Multi-Tenant Solutions - ITenantAccessor
public interface IAccountAccessor {
Account GetCurrentAccount();
}
@dealproc
dealproc / NancyContextAccountAccessor.cs
Created March 17, 2019 06:58
Multi-Tenant Solutions - NancyContextAccountAccessor.cs
public class NancyContextAccountAccessor : IAccountAccessor {
static readonly ILog _log = LogProvider.For<NancyContextAccountAccessor>();
readonly IAccountRepository _accountRepository;
readonly NancyContext _nancyContext;
public NancyContextAccountAccessor(IAccountRepository accountRepository, NancyContext nancyContext) {
_accountRepository = accountRepository;
_nancyContext = nancyContext;
}
@dealproc
dealproc / ClaimsPrincipalAccountAccessor.cs
Created March 17, 2019 07:02
Multi-Tenant Solutions - ClaimsPrincipalAccountAccessor.cs
public class ClaimsPrincipalAccountAccessor : IAccountAccessor {
static readonly ILog _log = LogProvider.For<ClaimsPrincipalAccountAccessor>();
readonly IAccountRepository _AccountRepository;
readonly IOwinContext _owinContext;
public ClaimsPrincipalAccountAccessor(IOwinContext owinContext, IAccountRepository accountRepository) {
_owinContext = owinContext;
_AccountRepository=accountRepository;
}
@dealproc
dealproc / HostnameAccountAccessor.cs
Created March 17, 2019 07:05
Multi-Tenant Solutions - HostnameAccountAccessor.cs
public class HostnameAccountAccessor : IAccountAccessor {
static readonly ILog _log = LogProvider.For<HostnameAccountAccessor>();
readonly IAccountRepository _AccountRepository;
readonly IOwinContext _owinContext;
Guid _instanceID;
public Guid InstanceID { get { return _instanceID; } }
public HostnameAccountAccessor(IOwinContext owinContext, IAccountRepository accountRepository) {
_instanceID = Guid.NewGuid();
@dealproc
dealproc / NHibernateMultiTenantSessionSource.cs
Last active March 17, 2019 07:11
Multi-Tenant Solutions - NHibernateMultiTenantSessionSource.cs
public class NHibernateMultiTenantSessionSource : ISessionSource {
#region Static Members and Constructor.
static readonly object _FactorySyncRoot = new object();
static readonly ConcurrentDictionary<string, ISessionFactory> _SessionFactories = new ConcurrentDictionary<string, ISessionFactory>();
#endregion
readonly IConfigurationReader _configurationManager;
readonly IAccountAccessor _accountAccessor;
readonly string _connectionStringModel;
public NHibernateMultiTenantSessionSource(IConfigurationReader configurationManager, IAccountAccessor accountAccessor) {
@dealproc
dealproc / IRepository<T>.cs
Created March 17, 2019 07:12
Multi-Tenant Solutions - IRepository<T>.cs
public interface IRepository<T> : IProject<T> where T : class, new() {
T Get(int id);
T GetFirst(Expression<Func<T, bool>> condition);
IEnumerable<T> GetAll();
T SaveOrUpdate(T entity);
IEnumerable<T> SaveOrUpdate(IEnumerable<T> entities);
void Delete(T item);
// other various operations on your repository of choice ...
}
@dealproc
dealproc / Repository<T>.cs
Created March 17, 2019 07:19
Multi-Tenant Solutions - Repository<T>.cs
public abstract class Repository<T> : IRepository<T> {
protected readonly ISessionSource _SessionSource;
public Repository(ISessionSource sessionSource) {
if (sessionSource == null) {
throw new ArgumentNullException("sessionFactory");
}
_SessionSource = sessionSource;
}
@dealproc
dealproc / NHibernateMultiTenantSessionSource.cs
Last active March 17, 2019 10:40
Multi-Tenant Solutions - NHibernateMultiTenantSessionSource.cs
public class NHibernateMultiTenantSessionSource : ISessionSource {
#region Static Members and Constructor.
static readonly object _FactorySyncRoot = new object();
static readonly ConcurrentDictionary<string, ISessionFactory> _SessionFactories = new ConcurrentDictionary<string, ISessionFactory>();
#endregion
readonly IConfigurationReader _configurationManager;
readonly IAccountAccessor _accountAccessor;
readonly string _connectionStringModel;
@dealproc
dealproc / ISessionSource.cs
Created March 17, 2019 10:38
Multi-Tenant Solutions - ISessionSource.cs
public interface ISessionSource {
ISession CreateSession();
}