/// <summary> /// Sets default row fields provider. This instance is required /// as rows might have to be created in contexts where dependency injection /// is not possible, like deserialization. If using a DI container, /// set this at startup to the same singleton service you register with DI. /// </summary> /// <param name="provider">Provider. Required.</param> /// <returns>Old default provider</returns> public static IRowFieldsProvider SetDefault(IRowFieldsProvider provider) { var old = defaultProvider; defaultProvider = provider ?? throw new ArgumentNullException(nameof(provider)); return(old); }
/// <summary> /// Sets local row fields provider for current thread and async context. /// Useful for background tasks, async methods, and testing to set provider locally and for /// auto spawned threads. /// </summary> /// <param name="provider">Row fields provider. Can be null.</param> /// <returns>Old local provider if any.</returns> public static IRowFieldsProvider SetLocal(IRowFieldsProvider provider) { var old = localProvider.Value; localProvider.Value = provider; return(old); }
static RowFieldsProvider() { defaultProvider = FallbackRowFieldsProvider.Instance; localProvider = new AsyncLocal <IRowFieldsProvider>(); }