forked from Taritsyn/JavaScriptEngineSwitcher
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsEngineSwitcher.cs
More file actions
135 lines (114 loc) · 2.89 KB
/
JsEngineSwitcher.cs
File metadata and controls
135 lines (114 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System;
using JavaScriptEngineSwitcher.Core.Resources;
namespace JavaScriptEngineSwitcher.Core
{
/// <summary>
/// JS engine switcher
/// </summary>
public sealed class JsEngineSwitcher : IJsEngineSwitcher
{
/// <summary>
/// Default instance of JS engine switcher
/// </summary>
private static readonly Lazy<IJsEngineSwitcher> _default
= new Lazy<IJsEngineSwitcher>(() => new JsEngineSwitcher());
/// <summary>
/// Current instance of JS engine switcher
/// </summary>
private static IJsEngineSwitcher _current;
/// <summary>
/// Gets or sets a instance of JS engine switcher
/// </summary>
public static IJsEngineSwitcher Current
{
get
{
return _current ?? _default.Value;
}
set
{
_current = value;
}
}
/// <summary>
/// Gets a instance of JS engine switcher
/// </summary>
[Obsolete("Use a `Current` property")]
public static IJsEngineSwitcher Instance
{
get { return Current; }
}
/// <summary>
/// Constructs an instance of JS engine switcher
/// </summary>
public JsEngineSwitcher()
: this(new JsEngineFactoryCollection())
{ }
/// <summary>
/// Constructs an instance of JS engine switcher
/// </summary>
public JsEngineSwitcher(JsEngineFactoryCollection engineFactories)
: this(engineFactories, string.Empty)
{ }
/// <summary>
/// Constructs an instance of JS engine switcher
/// </summary>
public JsEngineSwitcher(JsEngineFactoryCollection engineFactories, string defaultEngineName)
{
EngineFactories = engineFactories;
DefaultEngineName = defaultEngineName;
}
#region IJsEngineSwitcher implementation
/// <summary>
/// Gets or sets a name of default JS engine
/// </summary>
public string DefaultEngineName
{
get;
set;
}
/// <summary>
/// Gets a collection of JS engine factories
/// </summary>
public JsEngineFactoryCollection EngineFactories
{
get;
private set;
}
/// <summary>
/// Creates a instance of JS engine
/// </summary>
/// <param name="name">JS engine name</param>
/// <returns>JS engine</returns>
public IJsEngine CreateEngine(string name)
{
IJsEngine engine;
IJsEngineFactory engineFactory = EngineFactories.Get(name);
if (engineFactory != null)
{
engine = engineFactory.CreateEngine();
}
else
{
throw new JsEngineNotFoundException(
string.Format(Strings.Configuration_JsEngineFactoryNotFound, name));
}
return engine;
}
/// <summary>
/// Creates a instance of default JS engine
/// </summary>
/// <returns>JS engine</returns>
public IJsEngine CreateDefaultEngine()
{
string defaultJsEngineName = DefaultEngineName;
if (string.IsNullOrWhiteSpace(defaultJsEngineName))
{
throw new InvalidOperationException(Strings.Configuration_DefaultJsEngineNameNotSpecified);
}
IJsEngine jsEngine = CreateEngine(defaultJsEngineName);
return jsEngine;
}
#endregion
}
}