public virtual IServiceProvider GetOrAdd([NotNull] IDbContextOptions options) { var services = new ServiceCollection(); var builder = services.AddEntityFramework(); foreach (var extension in options.Extensions) { extension.ApplyServices(builder); } // Decided that this hashing algorithm is robust enough. See issue #762. unchecked { var key = services.Aggregate(0, (t, d) => (t * 397) ^ CalculateHash(d).GetHashCode()); return _configurations.GetOrAdd(key, k => services.BuildServiceProvider()); } }
public virtual IServiceProvider GetOrAdd(IDbContextOptionsExtensions options) { var services = new ServiceCollection(); var builder = services.AddEntityFramework(); foreach (var extension in options.Extensions) { extension.ApplyServices(builder); } // TODO: Consider more robust hashing algorithm // Note that no cryptographic algorithm is available on all of phone/store/k/desktop unchecked { var key = services.Aggregate(0, (t, d) => (t * 397) ^ CalculateHash(d).GetHashCode()); return _configurations.GetOrAdd(key, k => services.BuildServiceProvider()); } }