Skip to content

Instantly share code, notes, and snippets.

@mgroves
Created January 2, 2011 22:23
Show Gist options
  • Select an option

  • Save mgroves/762877 to your computer and use it in GitHub Desktop.

Select an option

Save mgroves/762877 to your computer and use it in GitHub Desktop.
PostSharp and TinyIoC sittin in a tree
using System;
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
{
public override void OnGetValue(LocationInterceptionArgs args)
{
if (ServiceLocator.Context == null)
{
var activityContext= (Context)args.Instance;
ServiceLocator.Context = activityContext.ApplicationContext.ApplicationContext;
}
var locationType = args.Location.LocationType;
var instantiation = ServiceLocator.Get(locationType);
if(instantiation != null)
{
args.SetNewValue(instantiation);
}
args.ProceedGetValue();
}
}
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>(Context);
container.Register<IStockDataProvider, YahooStockDataProvider>().AsMultiInstance();
container.Register<IPortfolioService, PortfolioService>().AsMultiInstance();
container.Register<IPortfolioRepository, AndroidSqlitePortfolioRepository>().AsMultiInstance();
return container;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment