madelson/DistributedLock

Provider interface for SQL locks

madelson opened this issue · 2 comments

When using the library with IOC patterns it's often desirable to inject connection information separately from the type of lock or lock name. A centralized provider API would simplify this:

class SqlDistributedLockProvider
{
    // factory methods
    SqlDistributedLock CreateLock(string name);
    SqlDistributedLock CreateLockWithExactName(string name); // does not use GetSafeName()
    SqlDistributedReaderWriterLock CreateReaderWriterLock(string name);
    ...

    // we may also want to offer convenience methods for locking directly
    IDisposable TryAcquireExclusiveLock(string name, TimeSpan timeout, CancellationToken cancellationToken);
}

Here is my implementation of a interface, used with dependancy injection:

https://pastebin.com/jBGgVY5J

(Couldn't get the formatting working properly)

I personally prefer this method- as it only requires me to reference this library in the project which contains my database connection.

The interface is defined in my "interfaces" class, which is referenced everywhere.