in src/BackupExplorer/Parser/StateManager.cs [45:72]
public async Task<T> GetOrAddAsync<T>(ITransaction tx, Uri name, TimeSpan timeout) where T : IReliableState
{
var result = await this.replicator.GetOrAddStateProviderAsync(
(Transaction)tx,
name,
(Uri n) =>
{
var passedType = typeof(T);
var needToWrap = !passedType.GetTypeInfo().IsClass;
var concreteType = needToWrap
? this._typeCache.GetConcreteType(passedType)
: passedType;
return (IStateProvider2)Activator.CreateInstance(concreteType);
},
timeout,
CancellationToken.None).ConfigureAwait(false);
try
{
return (T)result.Value;
}
catch (InvalidCastException)
{
// add log
throw;
}
}