New commands in FileBuilder as per Issue #177 #178

ENV, ARG, ENTRYPOINT, LABEL, USER, VOLUME.
Also support for the new parameters on FROM, COPY.

--- Ductus.FluentDocker/Builders/FileBuilder.cs
+++ Ductus.FluentDocker/Builders/FileBuilder.cs
@@ -76,9 +76,27 @@
       return this;
     }

+    /// <summary>
+    /// Specified a simplified from command with the image name (and optional tag name) only!
+    /// </summary>
+    /// <param name="from">The image and optional tag name.</param>
+    /// <returns>Itself for fluent access.</returns>
     public FileBuilder UseParent(string from)
     {
       _config.Commands.Add(new FromCommand(from));
+      return this;
+    }
+
+    /// <summary>
+    /// Specifies the _FROM_ command.
+    /// </summary>
+    /// <param name="imageAndTag">The image to derive from and a optional (colon) tag, e.g. myimg:mytag</param>
+    /// <param name="asName">An optional alias.</param>
+    /// <param name="platform">An optional platform such linux/amd64 or windows/amd64.</param>
+    /// <returns>Itself for fluent access.</returns>
+    public FileBuilder From(TemplateString imageAndTag, TemplateString asName = null, TemplateString platform = null)
+    {
+      _config.Commands.Add(new FromCommand(imageAndTag, asName, platform));
       return this;
     }

@@ -127,9 +145,22 @@
       return this;
     }

-    public FileBuilder Copy(TemplateString source, TemplateString dest)
-    {
-      _config.Commands.Add(new CopyCommand(source, dest));
+    /// <summary>
+    /// This generates the _COPY_ command.
+    /// </summary>
+    /// <param name="source">From directory.</param>
+    /// <param name="dest">To directory.</param>
+    /// <param name="chownUserAndGroup">Optional --chown user:group.</param>
+    /// <param name="fromAlias">
+    /// Optional source location from earlier buildstage FROM ... AS alias. This will
+    /// generate --from=aliasname in the _COPY_ command and hence reference a earlier
+    /// _FROM ... AS aliasname_ buildstep as source.
+    /// </param>
+    /// <returns>Itself for fluent access.</returns>
+    public FileBuilder Copy(TemplateString source, TemplateString dest,
+    TemplateString chownUserAndGroup = null, TemplateString fromAlias = null)
+    {
+      _config.Commands.Add(new CopyCommand(source, dest, chownUserAndGroup, fromAlias));
       return this;
     }

@@ -142,6 +173,59 @@
     public FileBuilder ExposePorts(params int[] ports)
     {
       _config.Commands.Add(new ExposeCommand(ports));
+      return this;
+    }
+
+    /// <summary>
+    /// Adds a _ENV_ command to _dockerfile_. The value of each name value pair is automatically
+    /// double quoted. Hence, it is possible to write spaces etc in the string without double quoting it.
+    /// </summary>
+    /// <param name="nameValue">Name=value array.</param>
+    /// <returns>Itself for fluent access.</returns>
+    /// <remarks>The name value is separated by space on same line.</remarks>
+    public FileBuilder Environment(params TemplateString[] nameValue)
+    {
+      _config.Commands.Add(new EnvCommand(nameValue));
+      return this;
+    }
+
+        /// <summary>
+    /// Adds a _LABEL_ command to _dockerfile_. The value of each name value pair is automatically
+    /// double quoted. Hence, it is possible to write spaces etc in the string without double quoting it.
+    /// </summary>
+    /// <param name="nameValue">Name=value array.</param>
+    /// <returns>Itself for fluent access.</returns>
+    /// <remarks>The name value is separated by space on same line.</remarks>
+    public FileBuilder Label(params TemplateString[] nameValue)
+    {
+      _config.Commands.Add(new LabelCommand(nameValue));
+      return this;
+    }
+
+    /// <summary>
+    /// Adds a _ARG_ command in _dockerfile_ with the optional _defaultValue_.
+    /// </summary>
+    /// <param name="name">The name of the argument.</param>
+    /// <param name="defaultValue">Optional a default value for the argument.</param>
+    /// <returns>Itself for fluent access.</returns>
+    public FileBuilder Arguments(TemplateString name, TemplateString defaultValue = null) {
+      _config.Commands.Add(new ArgCommand(name, defaultValue));
+      return this;
+    }
+
+    public FileBuilder Entrypoint(string command, params string[] args)
+    {
+      _config.Commands.Add(new EntrypointCommand(command, args));
+      return this;
+    }
+
+    public FileBuilder User(TemplateString user, TemplateString group = null) {
+      _config.Commands.Add(new UserCommand(user, group));
+      return this;
+    }
+
+    public FileBuilder Volume(params TemplateString[] mountpoints) {
+      _config.Commands.Add(new VolumeCommand(mountpoints));
       return this;
     }


put ETF product names into the menu

put ETF product names into the menu

--- src/MobileApp/XamarinCRM/ViewModels/Products/CategoriesViewModel.cs
+++ src/MobileApp/XamarinCRM/ViewModels/Products/CategoriesViewModel.cs
@@ -80,7 +80,24 @@
             IsBusy = true;
             LoadCategoriesCommand.ChangeCanExecute();

-            SubCategories = new ObservableCollection<Category>((await _DataService.GetCategoriesAsync((_Category != null) ? _Category.Id : null)));
+            //SubCategories = new ObservableCollection<Category>((await _DataService.GetCategoriesAsync((_Category != null) ? _Category.Id : null)));
+
+			SubCategories = new ObservableCollection<Category>();
+			SubCategories.Add(new Category() {
+				Name = "Ishares Nasdaq Biotechnology Etf"
+			});
+			SubCategories.Add(new Category()
+			{
+				Name = "Spdr S&p Biotech Etf"
+			});
+			SubCategories.Add(new Category()
+			{
+				Name = "BLDRS Asia Fund ETF "
+			});
+			SubCategories.Add(new Category()
+			{
+				Name = "Vanguard Information Technology Etf"
+			});

             IsBusy = false;
             LoadCategoriesCommand.ChangeCanExecute();


Update CharsComparer.cs

Update CharsComparer.cs

--- src/NUnitFramework/framework/Constraints/Comparers/CharsComparer.cs
+++ src/NUnitFramework/framework/Constraints/Comparers/CharsComparer.cs
@@ -1,12 +1,11 @@
 // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt

 #nullable enable
-using System;

 namespace NUnit.Framework.Constraints.Comparers
 {
     /// <summary>
-    /// Comparator for two <see cref="Char"/>s.
+    /// Comparator for two <see cref="char"/>s.
     /// </summary>
     internal static class CharsComparer
     {


Remove redundant test

Remove redundant test

--- src/NUnitFramework/tests/Attributes/RequiresThreadAttributeTests.cs
+++ src/NUnitFramework/tests/Attributes/RequiresThreadAttributeTests.cs
@@ -39,13 +39,6 @@
         [Test, RequiresThread]
         public void TestWithRequiresThreadRunsSetUpAndTestOnSameThread()
         {
-            Assert.That(Thread.CurrentThread, Is.EqualTo(SetupThread));
-        }
-
-        [Test]
-        public void TestWithoutRequresTHreadRunsEverythingOnSameThread()
-        {
-            Assert.That(Thread.CurrentThread, Is.EqualTo(ParentThread));
             Assert.That(Thread.CurrentThread, Is.EqualTo(SetupThread));
         }


Quick validation fix

Quick validation fix

--- src/Pickles/Pickles.UserInterface/MainWindowViewModel.cs
+++ src/Pickles/Pickles.UserInterface/MainWindowViewModel.cs
@@ -129,7 +129,7 @@
                                                 configuration.DocumentationFormat = selectedDocumentationFormat;
                                                 configuration.SystemUnderTestName = projectName;
                                                 configuration.SystemUnderTestVersion = projectVersion;
-                                                configuration.TestResultsFile = new FileInfo(testResultsFile);
+                                                configuration.TestResultsFile = testResultsFile != null ? new FileInfo(testResultsFile) : null;
                                                 configuration.TestResultsFormat = selectedTestResultsFormat;
                                                 configuration.Language = selectedLanguage != null ? selectedLanguage.TwoLetterISOLanguageName : CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;


Don't set high-water mark to 1 in tests, it doesn't work well on Linux

--- src/Abc.Zebus.Tests/Transport/ZmqTransportTests.cs
+++ src/Abc.Zebus.Tests/Transport/ZmqTransportTests.cs
@@ -390,7 +390,7 @@
         public void should_not_wait_blocked_peers_on_every_send()
         {
             var senderTransport = CreateAndStartZmqTransport();
-            senderTransport.SocketOptions.SendHighWaterMark = 1;
+            senderTransport.SocketOptions.SendHighWaterMark = 3;
             senderTransport.SocketOptions.SendTimeout = 20.Milliseconds();
             senderTransport.SocketOptions.SendRetriesBeforeSwitchingToClosedState = 0;


Implemented and Resolved #1060, Resolved #1061.

--- src/Abp.TestBase/TestBase/AbpIntegratedTestBase.cs
+++ src/Abp.TestBase/TestBase/AbpIntegratedTestBase.cs
@@ -14,37 +14,47 @@
     public abstract class AbpIntegratedTestBase : IDisposable
     {
         /// <summary>
-        /// A reference to the <see cref="IIocManager"/> used for this test.
+        /// Local <see cref="IIocManager"/> used for this test.
         /// </summary>
-        protected IIocManager LocalIocManager { get; private set; }
+        protected IIocManager LocalIocManager { get; }
+
+        protected AbpBootstrapper AbpBootstrapper { get; }

         /// <summary>
         /// Gets Session object. Can be used to change current user and tenant in tests.
         /// </summary>
         protected TestAbpSession AbpSession { get; private set; }

-        private readonly AbpBootstrapper _bootstrapper;
-
-        protected AbpIntegratedTestBase()
+        protected AbpIntegratedTestBase(bool initializeAbp = true)
         {
             LocalIocManager = new IocManager();
+            AbpBootstrapper = new AbpBootstrapper(LocalIocManager);

+            if (initializeAbp)
+            {
+                InitializeAbp();
+            }
+        }
+
+        protected void InitializeAbp()
+        {
             LocalIocManager.Register<IModuleFinder, TestModuleFinder>();
             LocalIocManager.Register<IAbpSession, TestAbpSession>();

-            AddModules(LocalIocManager.Resolve<TestModuleFinder>().Modules);
+            var modules = LocalIocManager.Resolve<TestModuleFinder>().Modules;
+            modules.Add<TestBaseModule>();
+            AddModules(modules);

             PreInitialize();

-            _bootstrapper = new AbpBootstrapper(LocalIocManager);
-            _bootstrapper.Initialize();
+            AbpBootstrapper.Initialize();

             AbpSession = LocalIocManager.Resolve<TestAbpSession>();
         }

         protected virtual void AddModules(ITypeList<AbpModule> modules)
         {
-            modules.Add<TestBaseModule>();
+
         }

         /// <summary>
@@ -57,7 +67,7 @@

         public virtual void Dispose()
         {
-            _bootstrapper.Dispose();
+            AbpBootstrapper.Dispose();
             LocalIocManager.Dispose();
         }


Refactored main window methods

Refactored main window methods

--- Test2d.UI.Perspex.Windows/MainWindow.paml.cs
+++ Test2d.UI.Perspex.Windows/MainWindow.paml.cs
@@ -44,100 +44,6 @@
         /// <summary>
         ///
         /// </summary>
-        private async Task OnOpen(object parameter)
-        {
-            if (parameter == null)
-            {
-                var dlg = new OpenFileDialog();
-                dlg.Filters.Add(new FileDialogFilter() { Name = "Project", Extensions = { "project" } });
-                dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
-                var result = await dlg.ShowAsync(this);
-                if (result != null)
-                {
-                    var path = result.FirstOrDefault();
-                    _context.Open(path);
-                    if (_context.Invalidate != null)
-                    {
-                        _context.Invalidate();
-                    }
-                }
-            }
-            else
-            {
-                string path = parameter as string;
-                if (path != null && System.IO.File.Exists(path))
-                {
-                    _context.Open(path);
-                }
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <returns></returns>
-        private async Task OnSave()
-        {
-            if (!string.IsNullOrEmpty(_context.Editor.ProjectPath))
-            {
-                _context.Save(_context.Editor.ProjectPath);
-            }
-            else
-            {
-                await OnSaveAs();
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <returns></returns>
-        private async Task OnSaveAs()
-        {
-            var dlg = new SaveFileDialog();
-            dlg.Filters.Add(new FileDialogFilter() { Name = "Project", Extensions = { "project" } });
-            dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
-            dlg.InitialFileName = _context.Editor.Project.Name + ".project";
-            var result = await dlg.ShowAsync(this);
-            if (result != null)
-            {
-                _context.Save(result);
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <returns></returns>
-        private async Task OnExport()
-        {
-            var dlg = new SaveFileDialog();
-            dlg.Filters.Add(new FileDialogFilter() { Name = "Pdf", Extensions = { "pdf" } });
-            dlg.Filters.Add(new FileDialogFilter() { Name = "Dxf", Extensions = { "dxf" } });
-            dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
-            dlg.InitialFileName = _context.Editor.Project.Name + ".pdf";
-            var result = await dlg.ShowAsync(this);
-            if (result != null)
-            {
-                var ext = System.IO.Path.GetExtension(result).ToLower();
-
-                if (ext == ".pdf")
-                {
-                    _context.ExportAsPdf(result, _context.Editor.Project);
-                    Process.Start(result);
-                }
-
-                if (ext == ".dxf")
-                {
-                    _context.ExportAsDxf(result);
-                    Process.Start(result);
-                }
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
         private void InitializeContext()
         {
             _context = new EditorContext()
@@ -152,9 +58,11 @@
                 CsvReader = new CsvHelperReader(),
                 CsvWriter = new CsvHelperWriter()
             };
+
             _context.InitializeEditor(new TraceLog());
+
             _context.Editor.Renderers[0].State.DrawShapeState = ShapeState.Visible;
-            _context.Editor.GetImageKey = async () => await GetImageKey();
+            _context.Editor.GetImageKey = async () => await OnGetImageKey();

             _context.Commands.OpenCommand =
                 Command<object>.Create(
@@ -173,19 +81,19 @@

             _context.Commands.ExportCommand =
                 Command<object>.Create(
-                    async  (item) => await OnExport(),
+                    async (item) => await OnExport(),
                     (item) => _context.IsEditMode());

             // TODO: Initialize other commands.

             DataContext = _context;
         }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <returns></returns>
-        public async Task<string> GetImageKey()
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <returns></returns>
+        private async Task<string> OnGetImageKey()
         {
             var dlg = new OpenFileDialog();
             dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
@@ -199,5 +107,99 @@
             }
             return null;
         }
+
+        /// <summary>
+        ///
+        /// </summary>
+        private async Task OnOpen(object parameter)
+        {
+            if (parameter == null)
+            {
+                var dlg = new OpenFileDialog();
+                dlg.Filters.Add(new FileDialogFilter() { Name = "Project", Extensions = { "project" } });
+                dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
+                var result = await dlg.ShowAsync(this);
+                if (result != null)
+                {
+                    var path = result.FirstOrDefault();
+                    _context.Open(path);
+                    if (_context.Invalidate != null)
+                    {
+                        _context.Invalidate();
+                    }
+                }
+            }
+            else
+            {
+                string path = parameter as string;
+                if (path != null && System.IO.File.Exists(path))
+                {
+                    _context.Open(path);
+                }
+            }
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <returns></returns>
+        private async Task OnSave()
+        {
+            if (!string.IsNullOrEmpty(_context.Editor.ProjectPath))
+            {
+                _context.Save(_context.Editor.ProjectPath);
+            }
+            else
+            {
+                await OnSaveAs();
+            }
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <returns></returns>
+        private async Task OnSaveAs()
+        {
+            var dlg = new SaveFileDialog();
+            dlg.Filters.Add(new FileDialogFilter() { Name = "Project", Extensions = { "project" } });
+            dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
+            dlg.InitialFileName = _context.Editor.Project.Name + ".project";
+            var result = await dlg.ShowAsync(this);
+            if (result != null)
+            {
+                _context.Save(result);
+            }
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <returns></returns>
+        private async Task OnExport()
+        {
+            var dlg = new SaveFileDialog();
+            dlg.Filters.Add(new FileDialogFilter() { Name = "Pdf", Extensions = { "pdf" } });
+            dlg.Filters.Add(new FileDialogFilter() { Name = "Dxf", Extensions = { "dxf" } });
+            dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
+            dlg.InitialFileName = _context.Editor.Project.Name + ".pdf";
+            var result = await dlg.ShowAsync(this);
+            if (result != null)
+            {
+                var ext = System.IO.Path.GetExtension(result).ToLower();
+
+                if (ext == ".pdf")
+                {
+                    _context.ExportAsPdf(result, _context.Editor.Project);
+                    Process.Start(result);
+                }
+
+                if (ext == ".dxf")
+                {
+                    _context.ExportAsDxf(result);
+                    Process.Start(result);
+                }
+            }
+        }
     }
 }


Fix default keyboard

Fix default keyboard

InputType.Null does not change soft keyboard type

--- src/Android/Avalonia.Android/AndroidInputMethod.cs
+++ src/Android/Avalonia.Android/AndroidInputMethod.cs
@@ -71,7 +71,7 @@
                     TextInputContentType.Password => global::Android.Text.InputTypes.TextVariationPassword,
                     TextInputContentType.Phone => global::Android.Text.InputTypes.ClassPhone,
                     TextInputContentType.Url => global::Android.Text.InputTypes.TextVariationUri,
-                    _ => global::Android.Text.InputTypes.Null
+                    _ => global::Android.Text.InputTypes.ClassText
                 };

                 if (options.AutoCapitalization)


GIS Project with custom crs as destination

--- src/GIS.cs
+++ src/GIS.cs
@@ -56,7 +56,7 @@
                 else
                     return ProjectionInfo.Name;
             }
-        }
+        }

         /// <summary>
         /// true if this CRS convert using custom function
@@ -186,8 +186,11 @@
         /// </summary>
         public Vector3D Project(Vector3D v, CRSData to)
         {
-            if (IsCustom)
-                return CustomCRSInfo.CustomProject(v, this, to);
+            if (IsCustom || to.IsCustom)
+            {
+                var custom = (CustomCRSInfo == null) ? to.CustomCRSInfo : CustomCRSInfo;
+                return custom.CustomProject(v, this, to);
+            }
             else
             {
                 var xy = new double[] { v.X, v.Y };
@@ -205,19 +208,23 @@
     public class CustomCRSInfo
     {

-        public string Name { get; private set; }
+        public string Name { get; private set; }
         public bool IsGeoCentric { get; private set; }
         public MeasureUnit MU { get; private set; }
         public CustomProject CustomProject { get; private set; }

         public CustomCRSInfo(string name, bool isGeoCentric, MeasureUnit mu, CustomProject customProjectFn)
         {
-            Name = name;
+            Name = name;
             IsGeoCentric = isGeoCentric;
             MU = mu;
             CustomProject = customProjectFn;
         }

+        public override string ToString()
+        {
+            return $"name:{Name} isgeo:{IsGeoCentric} mu:{MU}";
+        }
     }

     /// <summary>


Make Lock a readonly struct

Make Lock a readonly struct

--- Easy.Common/Extensions/GenericExtensions.cs
+++ Easy.Common/Extensions/GenericExtensions.cs
@@ -203,7 +203,7 @@
         /// As part of the Lock extension method on <c>object</c>s
         /// it provides a timeout mechanism for acquiring locks.
         /// </summary>
-        public struct Locker : IDisposable
+        public readonly struct Locker : IDisposable
         {
             private readonly object _obj;


Default file encoding to UTF-8

Default file encoding to UTF-8

--- ElectronicObserver/Utility/Configuration.cs
+++ ElectronicObserver/Utility/Configuration.cs
@@ -327,7 +327,7 @@
 					LogLevel = 2;
 					SaveLogFlag = true;
 					SaveErrorReport = true;
-					FileEncodingID = 4;
+					FileEncodingID = 1;
 					ShowSpoiler = true;
 					PlayTime = 0;
 					PlayTimeIgnoreInterval = 10 * 60;


show some menu on homepage

show some menu on homepage

--- InspectR/Views/InspectR/Index.cshtml
+++ InspectR/Views/InspectR/Index.cshtml
@@ -2,24 +2,51 @@
 @using InspectR.Helpers
 @{
     var UserProfile = ViewBag.UserProfile as InspectRUserProfile;
+    var heroSpan = UserProfile == null ? "span12" : "span8";
 }
-

-
InspectB.in

-
-
Having trouble testing remote http clients and webhooks? Point them to your InspectBin url and start inspecting. It's that easy!

-

-        InspectBin is based on the idea of RequestBin (requestb.in), set your http client or webhook to point to your InspectBin url.

-        We will collect http requests and show it in a nice and friendly way, live!
-

-    Create new InspectBin »
+

+

+

+
InspectB.in

+            @if (UserProfile == null)
+            {
+
+            }
+
Having trouble testing remote http clients and webhooks? Point them to your InspectBin url and start inspecting. It's that easy!

+

+                InspectBin is based on the idea of RequestBin (requestb.in), set your http client or webhook to point to your InspectBin url.

+                We will collect http requests and show it in a nice and friendly way, live!
+

+            Create new InspectBin »
+

+

+    @if (UserProfile != null)
+    {
+

+

+

+
Your bins:

+                    @foreach (var item in UserProfile.Inspectors.Take(10))
+                    {
+

+
+                                @if (item.Title != item.UniqueKey && !string.IsNullOrWhiteSpace(item.Title))
+                                {
+                                    @item.Title (@item.UniqueKey)
+                                }
+                                else
+                                {
+                                    @item.UniqueKey
+                                }
+
+

+                    }
+

+

+

+    }

-@if (UserProfile != null)
-{
-

-        Your bins:
-        @UserProfile.Inspectors.Select(x => x.UniqueKey).Join(", ", @@item)
-

-}
+


Fixing build on 1.1

Fixing build on 1.1

git-svn-id: 6eea8ec865c4fa60105bc56808c028bdcf72a817@99 079b0acf-d9fa-0310-9935-e5ade295c882

--- src/Rhino.Mocks.Tests/FieldsProblem/FieldProblem_Owen.cs
+++ src/Rhino.Mocks.Tests/FieldsProblem/FieldProblem_Owen.cs
@@ -1,5 +1,4 @@
 using System;
-using System.Collections.Generic;
 using System.Text;
 using Rhino.Mocks;
 using System.Data;
@@ -71,8 +70,8 @@
   {
     #region Mock Objects
     m_objMockRepository = new MockRepository();
-    m_objIApplication = m_objMockRepository.CreateMock<IApplicationSession>();
-    m_objIMetricBroker = m_objMockRepository.CreateMock<IMetricBroker>();
+    m_objIApplication = (IApplicationSession)m_objMockRepository.CreateMock(typeof(IApplicationSession));
+    m_objIMetricBroker = (IMetricBroker)m_objMockRepository.CreateMock(typeof(IMetricBroker));
     #endregion

     #region DataSets


return default endpoint if client is null.

--- ExoMail.Smtp/Protocol/SmtpSessionNetwork.cs
+++ ExoMail.Smtp/Protocol/SmtpSessionNetwork.cs
@@ -46,7 +46,10 @@
         /// </summary>
         public IPEndPoint LocalEndPoint
         {
-            get { return (IPEndPoint)this.TcpClient.Client.LocalEndPoint; }
+            get
+            {
+                return (IPEndPoint)this.TcpClient.Client.LocalEndPoint ?? new IPEndPoint(IPAddress.Loopback, 0);
+            }
         }

         /// <summary>
@@ -54,7 +57,10 @@
         /// </summary>
         public IPEndPoint RemoteEndPoint
         {
-            get { return (IPEndPoint)this.TcpClient.Client.RemoteEndPoint; }
+            get
+            {
+                return (IPEndPoint)this.TcpClient.Client.RemoteEndPoint ?? new IPEndPoint(IPAddress.Loopback, 0);
+            }
         }

         private async Task<string> GetPtrRecordAsync()


Added FactoryManager.Get which returns a factory by name.

--- FRBDK/Glue/Glue/Resources/IEntityFactory.cs
+++ FRBDK/Glue/Glue/Resources/IEntityFactory.cs
@@ -13,4 +13,79 @@
         void Initialize(string contentManager);
         void ClearListsToAddTo();
     }
+
+
+    public static class FactoryManager
+    {
+        static Dictionary<string, IEntityFactory> factoryDictionary = new Dictionary<string, IEntityFactory>();
+        public static IEntityFactory Get(string entityName)
+        {
+            if (factoryDictionary.ContainsKey(entityName))
+            {
+                return factoryDictionary[entityName];
+            }
+            else
+            {
+                var factory = FindFactory(entityName);
+                factoryDictionary.Add(entityName, factory);
+                return factory;
+            }
+        }
+
+        static Type[] typesInThisAssembly;
+        public static IEntityFactory FindFactory(string entityType)
+        {
+            if (typesInThisAssembly == null)
+            {
+#if WINDOWS_8 || UWP
+                var assembly = typeof(TileEntityInstantiator).GetTypeInfo().Assembly;
+                typesInThisAssembly = assembly.DefinedTypes.Select(item=>item.AsType()).ToArray();
+
+#else
+                var assembly = System.Reflection.Assembly.GetExecutingAssembly();
+                typesInThisAssembly = assembly.GetTypes();
+#endif
+            }
+
+
+#if WINDOWS_8 || UWP
+            var filteredTypes =
+                typesInThisAssembly.Where(t => t.GetInterfaces().Contains(typeof(IEntityFactory))
+                            && t.GetConstructors().Any(c=>c.GetParameters().Count() == 0));
+#else
+            var filteredTypes =
+                typesInThisAssembly.Where(t => t.GetInterfaces().Contains(typeof(IEntityFactory))
+                            && t.GetConstructor(Type.EmptyTypes) != null);
+#endif
+
+            var factories = filteredTypes
+                .Select(
+                    t =>
+                    {
+#if WINDOWS_8 || UWP
+                        var propertyInfo = t.GetProperty("Self");
+#else
+                        var propertyInfo = t.GetProperty("Self");
+#endif
+                        var value = propertyInfo.GetValue(null, null);
+                        return value as IEntityFactory;
+                    }).ToList();
+
+
+            var factory = factories.FirstOrDefault(item =>
+            {
+                var type = item.GetType();
+                var methodInfo = type.GetMethod("CreateNew", new[] { typeof(FlatRedBall.Graphics.Layer), typeof(float), typeof(float) });
+                var returntypeString = methodInfo.ReturnType.Name;
+
+                return entityType == returntypeString ||
+                    entityType.EndsWith("\\" + returntypeString) ||
+                    entityType.EndsWith("/" + returntypeString);
+            });
+            return factory;
+
+        }
+
+
+    }
 }


no message

no message

--- TurboRango/TurboRango.Dominio/Localizacao.cs
+++ TurboRango/TurboRango.Dominio/Localizacao.cs
@@ -10,7 +10,8 @@
     {
         internal string Bairro { get; set; }
         internal int Latitude { get; set; }
-        internal Categoria categoria { get; set; }
+        internal string Logradouro { get; set; }
+        internal string Longitude { get; set; }

     }
 }