From c851ea9516a420d973a2615860bad2f9254237a2 Mon Sep 17 00:00:00 2001 From: mgroves Date: Sun, 2 Jan 2011 17:27:28 -0500 Subject: [PATCH] refactored TinyIoC stuff into ServiceLocator class --- MonoStockPortfolio/Framework/IoCAttribute.cs | 58 +------------------ .../Framework/ServiceLocator.cs | 36 ++++++++++++ MonoStockPortfolio/MonoStockPortfolio.csproj | 1 + 3 files changed, 40 insertions(+), 55 deletions(-) create mode 100644 MonoStockPortfolio/Framework/ServiceLocator.cs diff --git a/MonoStockPortfolio/Framework/IoCAttribute.cs b/MonoStockPortfolio/Framework/IoCAttribute.cs index f3215ed..fa20ee4 100644 --- a/MonoStockPortfolio/Framework/IoCAttribute.cs +++ b/MonoStockPortfolio/Framework/IoCAttribute.cs @@ -1,78 +1,26 @@ using Android.Content; -using MonoStockPortfolio.Core.PortfolioRepositories; -using MonoStockPortfolio.Core.Services; -using MonoStockPortfolio.Core.StockData; using PostSharp.Aspects; -using TinyIoC; namespace MonoStockPortfolio.Framework { public class IoCAttribute : LocationInterceptionAspect { - private static Context _context; - private static TinyIoCContainer _container; - public override void OnGetValue(LocationInterceptionArgs args) { - if(_context == null) + if (ServiceLocator.Context == null) { var activityContext= (Context)args.Instance; - _context = activityContext.ApplicationContext.ApplicationContext; - } - - if (_container == null) - { - _container = RegisterTypes(); + ServiceLocator.Context = activityContext.ApplicationContext.ApplicationContext; } var locationType = args.Location.LocationType; + var instantiation = ServiceLocator.Get(locationType); - var instantiation = _container.Resolve(locationType); if(instantiation != null) { args.SetNewValue(instantiation); } args.ProceedGetValue(); } - - private TinyIoCContainer RegisterTypes() - { - var container = TinyIoCContainer.Current; - - container.Register(_context); - container.Register().AsMultiInstance(); - container.Register().AsMultiInstance(); - container.Register().AsMultiInstance(); - - return container; - } - -// private object GetInstance(Type locationType) -// { -// if (DependencyMap.ContainsKey(locationType)) -// { -// return DependencyMap[locationType](); -// } -// return null; -// } -// -// private IDictionary> DependencyMap -// { -// get { return _dependencyMap ?? (_dependencyMap = DefaultDependencies()); } -// } -// -// private static IDictionary> _dependencyMap; -// private IDictionary> DefaultDependencies() -// { -// var map = new Dictionary>(); -// map.Add(typeof(IPortfolioService), () => new PortfolioService(_context)); -// map.Add(typeof(IPortfolioRepository), () => new AndroidSqlitePortfolioRepository(_context)); -// return map; -// } -// -// public void LoadDependencies(IDictionary> dependencies) -// { -// _dependencyMap = dependencies; -// } } } \ No newline at end of file diff --git a/MonoStockPortfolio/Framework/ServiceLocator.cs b/MonoStockPortfolio/Framework/ServiceLocator.cs new file mode 100644 index 0000000..8022438 --- /dev/null +++ b/MonoStockPortfolio/Framework/ServiceLocator.cs @@ -0,0 +1,36 @@ +using System; +using Android.Content; +using MonoStockPortfolio.Core.PortfolioRepositories; +using MonoStockPortfolio.Core.Services; +using MonoStockPortfolio.Core.StockData; +using TinyIoC; + +namespace MonoStockPortfolio.Framework +{ + public static class ServiceLocator + { + public static Context Context { get; set; } + private static TinyIoCContainer _container; + + public static object Get(Type serviceType) + { + if (_container == null) + { + _container = RegisterTypes(); + } + return _container.Resolve(serviceType); + } + + private static TinyIoCContainer RegisterTypes() + { + var container = TinyIoCContainer.Current; + + container.Register(Context); + container.Register().AsMultiInstance(); + container.Register().AsMultiInstance(); + container.Register().AsMultiInstance(); + + return container; + } + } +} \ No newline at end of file diff --git a/MonoStockPortfolio/MonoStockPortfolio.csproj b/MonoStockPortfolio/MonoStockPortfolio.csproj index d7b4dd4..c8b58ea 100644 --- a/MonoStockPortfolio/MonoStockPortfolio.csproj +++ b/MonoStockPortfolio/MonoStockPortfolio.csproj @@ -67,6 +67,7 @@ PortfolioActivity.cs +