/// <summary> /// Add a file repository. Use ConfigureVerifier in the options to add the file types you want to support. /// This version allows you to use a type for injection so you can have multiple file repositories with different /// configurations. /// </summary> /// <typeparam name="InjectT">The type to uniquly identify this repository with. This type is not used anywhere in the actual repository.</typeparam> /// <param name="services">The service colleciton to add the file verifier to.</param> /// <param name="options">The options.</param> /// <returns>The service collection.</returns> public static IServiceCollection AddFileRepository <InjectT>(this IServiceCollection services, Action <FileRepositoryOptions <InjectT> > config) { var options = new FileRepositoryOptions <InjectT>(); config.Invoke(options); if (options.ConfigureVerifier == null) { throw new InvalidOperationException("You must include a function to configure your file validator."); } if (options.CreateFileRepository == null) { throw new InvalidOperationException("You must configure the file repository. Call UseFilesystem on your options to do this."); } services.AddSingleton <IFileVerifier <InjectT> >(s => { var verifier = new FileVerifier <InjectT>(); options.ConfigureVerifier(verifier); return(verifier); }); services.AddSingleton <IFileRepository <InjectT> >(s => options.CreateFileRepository(s)); return(services); }
public static FileRepositoryOptions <InjectT> UseLocalFiles <InjectT>(this FileRepositoryOptions <InjectT> options, Action <FileSystemOptions> config) { var fileSystemOptions = new FileSystemOptions(); config.Invoke(fileSystemOptions); if (options.CreateFileRepository != null) { throw new InvalidOperationException("Only configure CreateFileRepository one time."); } if (String.IsNullOrEmpty(fileSystemOptions.RootDir)) { throw new InvalidOperationException("You must include an output directory"); } options.CreateFileRepository = s => new FileRepository <InjectT>(fileSystemOptions.RootDir, s.GetRequiredService <IFileVerifier>()); return(options); }
public static FileRepositoryOptions <FileRepository.Handle> UseLocalFiles(this FileRepositoryOptions <FileRepository.Handle> options, Action <FileSystemOptions> config) { return(UseLocalFiles <FileRepository.Handle>(options, config)); }