ProjectArcade
64 строки · 2.1 Кб
1using System;
2using System.Collections.Generic;
3using System.Diagnostics.CodeAnalysis;
4using System.Linq;
5using System.Text;
6using System.Threading.Tasks;
7using DokanNet.Logging;
8using DokanNet.Native;
9
10namespace DokanNet
11{
12public class DokanInstanceBuilder
13{
14public delegate void OptionsConfigurationDelegate(DOKAN_OPTIONS options);
15/// <summary>
16/// The Dokan version that DokanNet is compatible with.
17/// </summary>
18/// <see cref="DOKAN_OPTIONS.Version"/>
19public const ushort DOKAN_VERSION = 200;
20private readonly DOKAN_OPTIONS _options;
21[SuppressMessage("CodeQuality", "IDE0052:Remove unread private members", Justification = "Dokan instance isn't really needed, a reference is kept to enforce a workflow")]
22private readonly Dokan _dokan;
23private ILogger _logger;
24
25public DokanInstanceBuilder(Dokan dokan)
26{
27_logger = new NullLogger();
28_options = new DOKAN_OPTIONS
29{
30Version = DOKAN_VERSION,
31MountPoint = "",
32UNCName = String.Empty,
33SingleThread = false,
34Options = DokanOptions.FixedDrive,
35TimeOut = TimeSpan.FromSeconds(20),
36AllocationUnitSize = 512u,
37SectorSize = 512u,
38VolumeSecurityDescriptorLength = 0,
39
40};
41_dokan = dokan;
42}
43public DokanInstanceBuilder ConfigureLogger(Func<ILogger> IlogegrFactory)
44{
45_logger = IlogegrFactory();
46return this;
47}
48public DokanInstanceBuilder ConfigureOptions(OptionsConfigurationDelegate optionsConfigurationDelegate)
49{
50optionsConfigurationDelegate(_options);
51return this;
52}
53public DokanInstanceBuilder Validate()
54{
55// throw on errors
56return this;
57}
58public DokanInstance Build(IDokanOperations operations)
59{
60return new DokanInstance(_logger, _options, operations);
61}
62
63}
64}
65