|
@@ -11,33 +11,48 @@ namespace Yuuna
|
|
using Yuuna.Contracts.Patterns;
|
|
using Yuuna.Contracts.Patterns;
|
|
using Yuuna.Contracts.TextSegmention;
|
|
using Yuuna.Contracts.TextSegmention;
|
|
using Yuuna.Contracts.Semantics;
|
|
using Yuuna.Contracts.Semantics;
|
|
|
|
+ using System.Linq;
|
|
|
|
|
|
public sealed class ModuleCoupler : IDisposable
|
|
public sealed class ModuleCoupler : IDisposable
|
|
{
|
|
{
|
|
- private WeakReference<ModuleBase> _module;
|
|
|
|
|
|
+ private ModuleBase _module;
|
|
private CollectibleLoader _loader;
|
|
private CollectibleLoader _loader;
|
|
- internal ModuleCoupler(IEnumerable<FileInfo> dlls)
|
|
|
|
|
|
+ private object _lock = new object();
|
|
|
|
+
|
|
|
|
+ internal ModuleCoupler(IEnumerable<FileInfo> deps, IEnumerable<FileInfo> dlls)
|
|
{
|
|
{
|
|
- this._loader = new CollectibleLoader();
|
|
|
|
- foreach (var dll in dlls)
|
|
|
|
|
|
+ this._loader = new CollectibleLoader(deps.First().FullName);
|
|
|
|
+ lock (this._lock)
|
|
{
|
|
{
|
|
- using (var fs = dll.OpenRead())
|
|
|
|
|
|
+
|
|
|
|
+ foreach (var dll in dlls)
|
|
{
|
|
{
|
|
- var asm = this._loader.LoadFromStream(fs);
|
|
|
|
- foreach (var t in asm.GetTypes())
|
|
|
|
|
|
+ try
|
|
{
|
|
{
|
|
- if (t.IsSubclassOf(typeof(ModuleBase)))
|
|
|
|
|
|
+ using (var fs = dll.OpenRead())
|
|
{
|
|
{
|
|
- this._module = new WeakReference<ModuleBase>(Activator.CreateInstance(t) as ModuleBase);
|
|
|
|
- if (this._module.TryGetTarget(out var m))
|
|
|
|
|
|
+ var asm = this._loader.LoadFromStream(fs);
|
|
|
|
+ // error:
|
|
|
|
+ foreach (var t in asm.GetTypes())
|
|
{
|
|
{
|
|
- this.Metadata = m.Metadata;
|
|
|
|
- this.Id = m.Id;
|
|
|
|
|
|
+ if (t.IsSubclassOf(typeof(ModuleBase)))
|
|
|
|
+ {
|
|
|
|
+ var inst = Activator.CreateInstance(t) as ModuleBase;
|
|
|
|
+
|
|
|
|
+ this._module = (inst);
|
|
|
|
+ this.Metadata = this._module.Metadata;
|
|
|
|
+ this.Id = this._module.Id;
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- break;
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ catch (Exception e)
|
|
|
|
+ {
|
|
|
|
+ Console.WriteLine(e);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -49,17 +64,14 @@ namespace Yuuna
|
|
|
|
|
|
public bool Initialize(ITextSegmenter s, IGroupManager g)
|
|
public bool Initialize(ITextSegmenter s, IGroupManager g)
|
|
{
|
|
{
|
|
|
|
+
|
|
if (this._module is null)
|
|
if (this._module is null)
|
|
return false;
|
|
return false;
|
|
-
|
|
|
|
- if (this._module.TryGetTarget(out var m))
|
|
|
|
- {
|
|
|
|
- m.Initialize(s, g, out var v);
|
|
|
|
|
|
+
|
|
|
|
+ this._module.Initialize(s, g, out var v);
|
|
this.Patterns = v;
|
|
this.Patterns = v;
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return false;
|
|
|
|
|
|
+ return true;
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
public void Dispose()
|
|
public void Dispose()
|
|
@@ -68,4 +80,84 @@ namespace Yuuna
|
|
this._loader = null;
|
|
this._loader = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //public sealed class ModuleCoupler : IDisposable
|
|
|
|
+ //{
|
|
|
|
+ // private WeakReference<ModuleBase> _module;
|
|
|
|
+ // private CollectibleLoader _loader;
|
|
|
|
+ // private object _lock = new object();
|
|
|
|
+
|
|
|
|
+ // internal ModuleCoupler(IEnumerable<FileInfo> deps, IEnumerable<FileInfo> dlls)
|
|
|
|
+ // {
|
|
|
|
+ // this._loader = new CollectibleLoader(deps.First().FullName);
|
|
|
|
+ // lock (this._lock)
|
|
|
|
+ // {
|
|
|
|
+
|
|
|
|
+ // foreach (var dll in dlls)
|
|
|
|
+ // {
|
|
|
|
+ // try
|
|
|
|
+ // {
|
|
|
|
+ // using (var fs = dll.OpenRead())
|
|
|
|
+ // {
|
|
|
|
+ // var asm = this._loader.LoadFromStream(fs);
|
|
|
|
+ // // error:
|
|
|
|
+ // foreach (var t in asm.GetTypes())
|
|
|
|
+ // {
|
|
|
|
+ // if (t.IsSubclassOf(typeof(ModuleBase)))
|
|
|
|
+ // {
|
|
|
|
+ // var inst = Activator.CreateInstance(t) as ModuleBase;
|
|
|
|
+
|
|
|
|
+ // this._module = new WeakReference<ModuleBase>(inst);
|
|
|
|
+ // if (this._module.TryGetTarget(out var m))
|
|
|
|
+ // {
|
|
|
|
+ // this.Metadata = m.Metadata;
|
|
|
|
+ // this.Id = m.Id;
|
|
|
|
+
|
|
|
|
+ // }
|
|
|
|
+ // break;
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // catch (Exception e)
|
|
|
|
+ // {
|
|
|
|
+ // Console.WriteLine(e);
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // public Guid Id { get; }
|
|
|
|
+
|
|
|
|
+ // public IPatternSet Patterns { get; private set; }
|
|
|
|
+ // public IModuleMetadata Metadata { get; }
|
|
|
|
+
|
|
|
|
+ // public bool Initialize(ITextSegmenter s, IGroupManager g)
|
|
|
|
+ // {
|
|
|
|
+
|
|
|
|
+ // if (this._module is null)
|
|
|
|
+ // return false;
|
|
|
|
+
|
|
|
|
+ // if (this._module.TryGetTarget(out var m))
|
|
|
|
+ // {
|
|
|
|
+ // m.Initialize(s, g, out var v);
|
|
|
|
+ // this.Patterns = v;
|
|
|
|
+ // return true;
|
|
|
|
+ // }
|
|
|
|
+ // else
|
|
|
|
+ // {
|
|
|
|
+
|
|
|
|
+ // Console.WriteLine("???????? ");
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // return false;
|
|
|
|
+ // }
|
|
|
|
+
|
|
|
|
+ // public void Dispose()
|
|
|
|
+ // {
|
|
|
|
+ // this._loader.Unload();
|
|
|
|
+ // this._loader = null;
|
|
|
|
+ // }
|
|
|
|
+ //}
|
|
}
|
|
}
|