Skip to content

Commit 61edb79

Browse files
committed
1. Instance property was renamed to the Current property
2. Now you can implement your own version of the `JsEngineSwitcher` class
1 parent b54a417 commit 61edb79

File tree

11 files changed

+102
-24
lines changed

11 files changed

+102
-24
lines changed

NuGet/JavaScriptEngineSwitcher.Core/JavaScriptEngineSwitcher.Core.nuspec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
<requireLicenseAcceptance>false</requireLicenseAcceptance>
1313
<description>JavaScript Engine Switcher determines unified interface for access to the basic features of popular JavaScript engines (MSIE JavaScript Engine for .Net, Microsoft ClearScript.V8, Jurassic, Jint and ChakraCore). This library allows you to quickly and easily switch to using of another JavaScript engine.</description>
1414
<summary>JavaScript Engine Switcher determines unified interface for access to the basic features of popular JavaScript engines (MSIE JavaScript Engine for .Net, Microsoft ClearScript.V8, Jurassic, Jint and ChakraCore).</summary>
15-
<releaseNotes>In `IJsEngine` interface was added `SupportsScriptInterruption` property and `Interrupt` method.</releaseNotes>
15+
<releaseNotes>1. `Instance` property was renamed to the `Current` property;
16+
2. Now you can implement your own version of the `JsEngineSwitcher` class.</releaseNotes>
1617
<copyright>Copyright (c) 2013-2017 Andrey Taritsyn - http://www.taritsyn.ru</copyright>
1718
<language>en-US</language>
1819
<tags>JavaScriptEngineSwitcher JavaScript ECMAScript</tags>

NuGet/JavaScriptEngineSwitcher.Core/readme.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
=============
2020
RELEASE NOTES
2121
=============
22-
In `IJsEngine` interface was added `SupportsScriptInterruption` property and
23-
`Interrupt` method.
22+
1. `Instance` property was renamed to the `Current` property;
23+
2. Now you can implement your own version of the `JsEngineSwitcher` class.
2424

2525
=============
2626
DOCUMENTATION

samples/JavaScriptEngineSwitcher.Sample.AspNet4.Mvc4/App_Start/JsEngineSwitcherConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace JavaScriptEngineSwitcher.Sample.AspNet4.Mvc4
1010
{
1111
public class JsEngineSwitcherConfig
1212
{
13-
public static void Configure(JsEngineSwitcher engineSwitcher)
13+
public static void Configure(IJsEngineSwitcher engineSwitcher)
1414
{
1515
engineSwitcher.EngineFactories
1616
.AddChakraCore()

samples/JavaScriptEngineSwitcher.Sample.AspNet4.Mvc4/Global.asax.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ protected void Application_Start()
1414

1515
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
1616
RouteConfig.RegisterRoutes(RouteTable.Routes);
17-
JsEngineSwitcherConfig.Configure(JsEngineSwitcher.Instance);
17+
JsEngineSwitcherConfig.Configure(JsEngineSwitcher.Current);
1818
}
1919
}
2020
}

samples/JavaScriptEngineSwitcher.Sample.Logic/Services/JsEvaluationService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class JsEvaluationService
1818
{
1919
private static readonly Dictionary<string, string> _engineDisplayNameMappings;
2020

21-
private readonly JsEngineSwitcher _engineSwitcher;
21+
private readonly IJsEngineSwitcher _engineSwitcher;
2222

2323

2424
static JsEvaluationService()
@@ -35,11 +35,11 @@ static JsEvaluationService()
3535

3636
#if NET40
3737
public JsEvaluationService()
38-
: this(JsEngineSwitcher.Instance)
38+
: this(JsEngineSwitcher.Current)
3939
{ }
4040

4141
#endif
42-
public JsEvaluationService(JsEngineSwitcher engineSwitcher)
42+
public JsEvaluationService(IJsEngineSwitcher engineSwitcher)
4343
{
4444
_engineSwitcher = engineSwitcher;
4545
}

src/JavaScriptEngineSwitcher.Core.Net4/JavaScriptEngineSwitcher.Core.Net40.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@
5959
<Compile Include="..\JavaScriptEngineSwitcher.Core\IJsEngineFactory.cs">
6060
<Link>IJsEngineFactory.cs</Link>
6161
</Compile>
62+
<Compile Include="..\JavaScriptEngineSwitcher.Core\IJsEngineSwitcher.cs">
63+
<Link>IJsEngineSwitcher.cs</Link>
64+
</Compile>
6265
<Compile Include="..\JavaScriptEngineSwitcher.Core\InterlockedStatedFlag.cs">
6366
<Link>InterlockedStatedFlag.cs</Link>
6467
</Compile>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
namespace JavaScriptEngineSwitcher.Core
2+
{
3+
/// <summary>
4+
/// Defines a interface of JS engine switcher
5+
/// </summary>
6+
public interface IJsEngineSwitcher
7+
{
8+
/// <summary>
9+
/// Gets or sets a name of default JS engine
10+
/// </summary>
11+
string DefaultEngineName
12+
{
13+
get;
14+
set;
15+
}
16+
17+
/// <summary>
18+
/// Gets a collection of JS engine factories
19+
/// </summary>
20+
JsEngineFactoryCollection EngineFactories
21+
{
22+
get;
23+
}
24+
25+
26+
/// <summary>
27+
/// Creates a instance of JS engine
28+
/// </summary>
29+
/// <param name="name">JS engine name</param>
30+
/// <returns>JS engine</returns>
31+
IJsEngine CreateEngine(string name);
32+
33+
/// <summary>
34+
/// Creates a instance of default JS engine
35+
/// </summary>
36+
/// <returns>JS engine</returns>
37+
IJsEngine CreateDefaultEngine();
38+
}
39+
}

src/JavaScriptEngineSwitcher.Core/JsEngineSwitcher.cs

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,41 @@ namespace JavaScriptEngineSwitcher.Core
77
/// <summary>
88
/// JS engine switcher
99
/// </summary>
10-
public sealed class JsEngineSwitcher
10+
public sealed class JsEngineSwitcher : IJsEngineSwitcher
1111
{
1212
/// <summary>
13-
/// Instance of JS engine switcher
13+
/// Default instance of JS engine switcher
1414
/// </summary>
15-
private static readonly Lazy<JsEngineSwitcher> _instance =
16-
new Lazy<JsEngineSwitcher>(() => new JsEngineSwitcher());
15+
private static readonly Lazy<IJsEngineSwitcher> _default
16+
= new Lazy<IJsEngineSwitcher>(() => new JsEngineSwitcher());
17+
18+
/// <summary>
19+
/// Current instance of JS engine switcher
20+
/// </summary>
21+
private static IJsEngineSwitcher _current;
22+
23+
/// <summary>
24+
/// Gets or sets a instance of JS engine switcher
25+
/// </summary>
26+
public static IJsEngineSwitcher Current
27+
{
28+
get
29+
{
30+
return _current ?? _default.Value;
31+
}
32+
set
33+
{
34+
_current = value;
35+
}
36+
}
1737

1838
/// <summary>
1939
/// Gets a instance of JS engine switcher
2040
/// </summary>
21-
public static JsEngineSwitcher Instance
41+
[Obsolete("Use a `Current` property")]
42+
public static IJsEngineSwitcher Instance
2243
{
23-
get { return _instance.Value; }
44+
get { return Current; }
2445
}
2546

2647
/// <summary>
@@ -43,12 +64,26 @@ public JsEngineFactoryCollection EngineFactories
4364

4465

4566
/// <summary>
46-
/// Private constructor for implementation Singleton pattern
67+
/// Constructs an instance of JS engine switcher
68+
/// </summary>
69+
public JsEngineSwitcher()
70+
: this(new JsEngineFactoryCollection())
71+
{ }
72+
73+
/// <summary>
74+
/// Constructs an instance of JS engine switcher
75+
/// </summary>
76+
public JsEngineSwitcher(JsEngineFactoryCollection engineFactories)
77+
: this(engineFactories, string.Empty)
78+
{ }
79+
80+
/// <summary>
81+
/// Constructs an instance of JS engine switcher
4782
/// </summary>
48-
private JsEngineSwitcher()
83+
public JsEngineSwitcher(JsEngineFactoryCollection engineFactories, string defaultEngineName)
4984
{
50-
DefaultEngineName = string.Empty;
51-
EngineFactories = new JsEngineFactoryCollection();
85+
EngineFactories = engineFactories;
86+
DefaultEngineName = defaultEngineName;
5287
}
5388

5489

src/JavaScriptEngineSwitcher.Extensions.MsDependencyInjection/JsEngineSwitcherServiceCollectionExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static JsEngineFactoryCollection AddJsEngineSwitcher(this IServiceCollect
2323
throw new ArgumentNullException("services");
2424
}
2525

26-
JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance;
26+
IJsEngineSwitcher engineSwitcher = JsEngineSwitcher.Current;
2727
services.AddSingleton(engineSwitcher);
2828

2929
return engineSwitcher.EngineFactories;
@@ -33,10 +33,10 @@ public static JsEngineFactoryCollection AddJsEngineSwitcher(this IServiceCollect
3333
/// Adds a JS engine switcher to <see cref="IServiceCollection"/>
3434
/// </summary>
3535
/// <param name="services">The services available in the application</param>
36-
/// <param name="configure">The <see cref="JsEngineSwitcher"/> which need to be configured</param>
36+
/// <param name="configure">The <see cref="IJsEngineSwitcher"/> which need to be configured</param>
3737
/// <returns>Instance of <see cref="JsEngineFactoryCollection" /></returns>
3838
public static JsEngineFactoryCollection AddJsEngineSwitcher(this IServiceCollection services,
39-
Action<JsEngineSwitcher> configure)
39+
Action<IJsEngineSwitcher> configure)
4040
{
4141
if (services == null)
4242
{
@@ -48,7 +48,7 @@ public static JsEngineFactoryCollection AddJsEngineSwitcher(this IServiceCollect
4848
throw new ArgumentNullException("configure");
4949
}
5050

51-
JsEngineSwitcher engineSwitcher = JsEngineSwitcher.Instance;
51+
IJsEngineSwitcher engineSwitcher = JsEngineSwitcher.Current;
5252
configure(engineSwitcher);
5353

5454
services.AddSingleton(engineSwitcher);

test/JavaScriptEngineSwitcher.Tests/JsEngineSwitcherInitializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static void Initialize()
1919
{
2020
if (_initializedFlag.Set())
2121
{
22-
JsEngineSwitcher.Instance.EngineFactories
22+
JsEngineSwitcher.Current.EngineFactories
2323
.AddChakraCore()
2424
.AddJint()
2525
.AddMsie(new MsieSettings

0 commit comments

Comments
 (0)