Common Service Locator for MAF
Here's an implementation of the Common Service Locator for MAF:
public class MafServiceLocator : IServiceLocator { #region Public constructor public MafServiceLocator() { this.Path = Environment.CurrentDirectory; this.Level = AddInSecurityLevel.FullTrust; } #endregion #region Public properties public String Path { get; set; } public AddInSecurityLevel Level { get; set; } #endregion #region IServiceLocator Members public IEnumerable<TService> GetAllInstances<TService>() { AddInStore.Update(this.Path); foreach (AddInToken token in AddInStore.FindAddIns(typeof(TService), this.Path)) { yield return (token.Activate<TService>(this.Level)); } } public IEnumerable<Object>GetAllInstances(Type serviceType) { AddInStore.Update(this.Path); foreach (AddInToken token in AddInStore.FindAddIns(serviceType, this.Path)) { yield return (token.Activate<Object>(this.Level)); } } public TService GetInstance<TService>(String key) { AddInStore.Update(this.Path); foreach (AddInToken token in AddInStore.FindAddIns(typeof(TService), this.Path)) { if (token.Name == key) { return (token.Activate<TService>(this.Level)); } } return (default(TService)); } public TService GetInstance<TService>() { AddInStore.Update(this.Path); foreach (AddInToken token in AddInStore.FindAddIns(typeof(TService), this.Path)) { return (token.Activate<TService>(this.Level)); } return (default(TService)); } public Object GetInstance(Type serviceType, String key) { AddInStore.Update(this.Path); foreach (AddInToken token in AddInStore.FindAddIns(serviceType, this.Path)) { if (token.Name == key) { return (token.Activate<Object>(this.Level)); } } return (null); } public Object GetInstance(Type serviceType) { AddInStore.Update(this.Path); foreach (AddInToken token in AddInStore.FindAddIns(serviceType, this.Path)) { return (token.Activate<Object>(this.Level)); } return (null); } #endregion #region IServiceProvider Members public Object GetService(Type serviceType) { AddInStore.Update(this.Path); return (this.GetInstance(serviceType)); } #endregion } ServiceLocator.SetLocatorProvider(() => new MafServiceLocator()); IEnumerable<IOperation> operations = ServiceLocator.Current.GetAllInstances<IOperation>(); IOperation op = ServiceLocator.Current.GetService(typeof(IOperation)) as IOperation;