From 42436b1ab22f7c4f39dd4a51f702a70e6803b140 Mon Sep 17 00:00:00 2001 From: Pavel Samarkin Date: Wed, 22 Jul 2015 23:22:30 -0700 Subject: [PATCH] Dumb dependency tree implementation --- AssemblyInfo.Common/AssemblyDependency.cs | 6 ++++++ AssemblyInfo.Common/AssemblyProber.cs | 15 +++++++++++++-- AssemblyInfo/MainWindow.xaml | 6 +++--- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/AssemblyInfo.Common/AssemblyDependency.cs b/AssemblyInfo.Common/AssemblyDependency.cs index ffd5ad9..b1a5611 100644 --- a/AssemblyInfo.Common/AssemblyDependency.cs +++ b/AssemblyInfo.Common/AssemblyDependency.cs @@ -11,6 +11,7 @@ public class AssemblyDependency private readonly string _resolvedName; private readonly bool _redirected; private readonly string _resolvedDifference; + private AssemblyProber _assemblyProber; public AssemblyDependency(string displayName, bool satisfied, string resolvedName) { @@ -60,5 +61,10 @@ public string ResolvedDifference { get { return _resolvedDifference; } } + + public AssemblyProber Assembly + { + get { return _assemblyProber ?? (_assemblyProber = AssemblyProber.Create(_displayName, true)); } + } } } \ No newline at end of file diff --git a/AssemblyInfo.Common/AssemblyProber.cs b/AssemblyInfo.Common/AssemblyProber.cs index 36df7f3..8d00ef2 100644 --- a/AssemblyInfo.Common/AssemblyProber.cs +++ b/AssemblyInfo.Common/AssemblyProber.cs @@ -50,9 +50,18 @@ public class AssemblyProber private bool? _debug; private readonly ErrorLevel _errorLevel; - + + private static readonly Dictionary, AssemblyProber> AssemblyCache = new Dictionary, AssemblyProber>(); + public static AssemblyProber Create(string name, bool isAssemblyName = false) { + var arg = new Tuple(name, isAssemblyName); + AssemblyProber result; + if (AssemblyCache.TryGetValue(arg, out result)) + { + return result; + } + AppDomainSetup setup = new AppDomainSetup { ApplicationBase = isAssemblyName || string.IsNullOrWhiteSpace(name) @@ -62,7 +71,9 @@ public static AssemblyProber Create(string name, bool isAssemblyName = false) AppDomain tmpDomain = AppDomain.CreateDomain("Temporary AssemblyProber domain", null, setup); try { - return tmpDomain.CreateInstanceUsingPrivateConstructor(name, isAssemblyName); + result = tmpDomain.CreateInstanceUsingPrivateConstructor(name, isAssemblyName); + AssemblyCache[arg] = result; + return result; } finally { diff --git a/AssemblyInfo/MainWindow.xaml b/AssemblyInfo/MainWindow.xaml index 76b3a42..04c1e40 100644 --- a/AssemblyInfo/MainWindow.xaml +++ b/AssemblyInfo/MainWindow.xaml @@ -66,7 +66,7 @@ - + @@ -107,7 +107,7 @@ - + @@ -144,6 +144,6 @@ - +