aboutsummaryrefslogtreecommitdiff
path: root/Emby.Common.Implementations/BaseApplicationHost.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Common.Implementations/BaseApplicationHost.cs')
-rw-r--r--Emby.Common.Implementations/BaseApplicationHost.cs139
1 files changed, 125 insertions, 14 deletions
diff --git a/Emby.Common.Implementations/BaseApplicationHost.cs b/Emby.Common.Implementations/BaseApplicationHost.cs
index ac2747640..2fe82e5a4 100644
--- a/Emby.Common.Implementations/BaseApplicationHost.cs
+++ b/Emby.Common.Implementations/BaseApplicationHost.cs
@@ -32,6 +32,9 @@ using MediaBrowser.Common.IO;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Tasks;
+#if NETSTANDARD1_6
+using System.Runtime.Loader;
+#endif
namespace Emby.Common.Implementations
{
@@ -173,12 +176,26 @@ namespace Emby.Common.Implementations
public virtual string OperatingSystemDisplayName
{
- get { return Environment.OSVersion.VersionString; }
+ get
+ {
+#if NET46
+ return Environment.OSVersion.VersionString;
+#endif
+#if NETSTANDARD1_6
+ return System.Runtime.InteropServices.RuntimeInformation.OSDescription;
+#endif
+ return "Operating System";
+ }
}
public IMemoryStreamProvider MemoryStreamProvider { get; set; }
/// <summary>
+ /// The container
+ /// </summary>
+ protected readonly SimpleInjector.Container Container = new SimpleInjector.Container();
+
+ /// <summary>
/// Initializes a new instance of the <see cref="BaseApplicationHost{TApplicationPathsType}"/> class.
/// </summary>
protected BaseApplicationHost(TApplicationPathsType applicationPaths,
@@ -284,11 +301,10 @@ namespace Emby.Common.Implementations
builder.AppendLine(string.Format("Command line: {0}", string.Join(" ", Environment.GetCommandLineArgs())));
+#if NET46
builder.AppendLine(string.Format("Operating system: {0}", Environment.OSVersion));
- builder.AppendLine(string.Format("Processor count: {0}", Environment.ProcessorCount));
builder.AppendLine(string.Format("64-Bit OS: {0}", Environment.Is64BitOperatingSystem));
builder.AppendLine(string.Format("64-Bit Process: {0}", Environment.Is64BitProcess));
- builder.AppendLine(string.Format("Program data path: {0}", appPaths.ProgramDataPath));
Type type = Type.GetType("Mono.Runtime");
if (type != null)
@@ -299,7 +315,10 @@ namespace Emby.Common.Implementations
builder.AppendLine("Mono: " + displayName.Invoke(null, null));
}
}
+#endif
+ builder.AppendLine(string.Format("Processor count: {0}", Environment.ProcessorCount));
+ builder.AppendLine(string.Format("Program data path: {0}", appPaths.ProgramDataPath));
builder.AppendLine(string.Format("Application Path: {0}", appPaths.ApplicationPath));
return builder;
@@ -312,7 +331,9 @@ namespace Emby.Common.Implementations
try
{
// Increase the max http request limit
+#if NET46
ServicePointManager.DefaultConnectionLimit = Math.Max(96, ServicePointManager.DefaultConnectionLimit);
+#endif
}
catch (Exception ex)
{
@@ -410,6 +431,7 @@ namespace Emby.Common.Implementations
if (assemblyPlugin != null)
{
+#if NET46
var assembly = plugin.GetType().Assembly;
var assemblyName = assembly.GetName();
@@ -420,10 +442,24 @@ namespace Emby.Common.Implementations
var assemblyFilePath = Path.Combine(ApplicationPaths.PluginsPath, assemblyFileName);
assemblyPlugin.SetAttributes(assemblyFilePath, assemblyFileName, assemblyName.Version, assemblyId);
+#elif NETSTANDARD1_6
+ var typeInfo = plugin.GetType().GetTypeInfo();
+ var assembly = typeInfo.Assembly;
+ var assemblyName = assembly.GetName();
+
+ var attribute = (GuidAttribute)assembly.GetCustomAttribute(typeof(GuidAttribute));
+ var assemblyId = new Guid(attribute.Value);
+
+ var assemblyFileName = assemblyName.Name + ".dll";
+ var assemblyFilePath = Path.Combine(ApplicationPaths.PluginsPath, assemblyFileName);
+
+ assemblyPlugin.SetAttributes(assemblyFilePath, assemblyFileName, assemblyName.Version, assemblyId);
+#else
+return null;
+#endif
}
var isFirstRun = !File.Exists(plugin.ConfigurationFilePath);
-
plugin.SetStartupInfo(isFirstRun, File.GetLastWriteTimeUtc, s => Directory.CreateDirectory(s));
}
catch (Exception ex)
@@ -451,7 +487,17 @@ namespace Emby.Common.Implementations
AllConcreteTypes = assemblies
.SelectMany(GetTypes)
- .Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType)
+ .Where(t =>
+ {
+#if NET46
+ return t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType;
+#endif
+#if NETSTANDARD1_6
+ var typeInfo = t.GetTypeInfo();
+ return typeInfo.IsClass && !typeInfo.IsAbstract && !typeInfo.IsInterface && !typeInfo.IsGenericType;
+#endif
+ return false;
+ })
.ToArray();
}
@@ -532,14 +578,38 @@ namespace Emby.Common.Implementations
/// </summary>
/// <param name="type">The type.</param>
/// <returns>System.Object.</returns>
- public abstract object CreateInstance(Type type);
+ public object CreateInstance(Type type)
+ {
+ try
+ {
+ return Container.GetInstance(type);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error creating {0}", ex, type.FullName);
+
+ throw;
+ }
+ }
/// <summary>
/// Creates the instance safe.
/// </summary>
/// <param name="type">The type.</param>
/// <returns>System.Object.</returns>
- protected abstract object CreateInstanceSafe(Type type);
+ protected object CreateInstanceSafe(Type type)
+ {
+ try
+ {
+ return Container.GetInstance(type);
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error creating {0}", ex, type.FullName);
+ // Don't blow up in release mode
+ return null;
+ }
+ }
/// <summary>
/// Registers the specified obj.
@@ -547,30 +617,58 @@ namespace Emby.Common.Implementations
/// <typeparam name="T"></typeparam>
/// <param name="obj">The obj.</param>
/// <param name="manageLifetime">if set to <c>true</c> [manage lifetime].</param>
- protected abstract void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
- where T : class;
+ protected void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
+ where T : class
+ {
+ Container.RegisterSingleton(obj);
+
+ if (manageLifetime)
+ {
+ var disposable = obj as IDisposable;
+
+ if (disposable != null)
+ {
+ DisposableParts.Add(disposable);
+ }
+ }
+ }
/// <summary>
/// Registers the single instance.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="func">The func.</param>
- protected abstract void RegisterSingleInstance<T>(Func<T> func)
- where T : class;
+ protected void RegisterSingleInstance<T>(Func<T> func)
+ where T : class
+ {
+ Container.RegisterSingleton(func);
+ }
/// <summary>
/// Resolves this instance.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns>``0.</returns>
- public abstract T Resolve<T>();
+ public T Resolve<T>()
+ {
+ return (T)Container.GetRegistration(typeof(T), true).GetInstance();
+ }
/// <summary>
/// Resolves this instance.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns>``0.</returns>
- public abstract T TryResolve<T>();
+ public T TryResolve<T>()
+ {
+ var result = Container.GetRegistration(typeof(T), false);
+
+ if (result == null)
+ {
+ return default(T);
+ }
+ return (T)result.GetInstance();
+ }
/// <summary>
/// Loads the assembly.
@@ -581,7 +679,13 @@ namespace Emby.Common.Implementations
{
try
{
+#if NET46
return Assembly.Load(File.ReadAllBytes(file));
+#elif NETSTANDARD1_6
+
+ return AssemblyLoadContext.Default.LoadFromStream(new MemoryStream(File.ReadAllBytes(file)));
+#endif
+ return null;
}
catch (Exception ex)
{
@@ -600,7 +704,14 @@ namespace Emby.Common.Implementations
{
var currentType = typeof(T);
- return AllConcreteTypes.AsParallel().Where(currentType.IsAssignableFrom);
+#if NET46
+ return AllConcreteTypes.Where(currentType.IsAssignableFrom);
+#elif NETSTANDARD1_6
+ var currentTypeInfo = currentType.GetTypeInfo();
+
+ return AllConcreteTypes.Where(currentTypeInfo.IsAssignableFrom);
+#endif
+ return new List<Type>();
}
/// <summary>