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) { var activityContext= (Context)args.Instance; _context = activityContext.ApplicationContext.ApplicationContext; } if (_container == null) { _container = RegisterTypes(); } var locationType = args.Location.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; // } } }