From 2cd58ac4b38543e2c46f118ec1da21ee43e36e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AC=9D=E6=A1=82=E7=B6=B1?= Date: Mon, 29 Feb 2016 19:56:58 +0800 Subject: [PATCH] linq register namespace --- .../Provider/ImportsAPI/APIProvider.vb | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/LINQ/LINQ/Framewok/Provider/ImportsAPI/APIProvider.vb b/LINQ/LINQ/Framewok/Provider/ImportsAPI/APIProvider.vb index aaef56d..271b524 100644 --- a/LINQ/LINQ/Framewok/Provider/ImportsAPI/APIProvider.vb +++ b/LINQ/LINQ/Framewok/Provider/ImportsAPI/APIProvider.vb @@ -2,6 +2,7 @@ Imports System.Text Imports Microsoft.VisualBasic.ComponentModel Imports Microsoft.VisualBasic.Serialization +Imports Microsoft.VisualBasic.Scripting.MetaData Namespace Framework.Provider.ImportsAPI @@ -13,24 +14,52 @@ Namespace Framework.Provider.ImportsAPI Public Property Packages As ImportsNs() Get - Return __nsList.ToArray + Return __nsList.Values.ToArray End Get Set(value As ImportsNs()) If value Is Nothing Then - __nsList = New List(Of ImportsNs) + __nsList = New Dictionary(Of String, ImportsNs) Else - __nsList = value.ToList + __nsList = value.ToDictionary(Function(x) x.Namespace.ToLower) End If End Set End Property - Dim __nsList As List(Of ImportsNs) + ''' + ''' {lower_ns, imports_ns} + ''' + Dim __nsList As Dictionary(Of String, ImportsNs) Public Shared ReadOnly Property DefaultFile As String = App.ProductSharedDIR & "/API.Imports.json" Public Function Register(assm As Assembly) As Boolean + Dim types As Type() = assm.GetTypes + Dim LQuery = (From type As Type In types + Let ns As PackageNamespace = GetEntry(type) + Where Not ns Is Nothing + Select ns, + type).ToArray + For Each type In LQuery + Dim ns As String = type.ns.Namespace.ToLower + If Not __nsList.ContainsKey(ns) Then + Call __nsList.Add(ns, New ImportsNs) + End If + + Call __nsList(ns).Add(type.type) + Next + Return True + End Function + Public Function Register(path As String) As Boolean + Try + Dim assm As Assembly = Assembly.LoadFile(path) + Return Register(assm) + Catch ex As Exception + ex = New Exception(path, ex) + Call App.LogException(ex) + Return False + End Try End Function Public Function Save(Optional Path As String = "", Optional encoding As Encoding = Nothing) As Boolean Implements ISaveHandle.Save