Created
February 6, 2018 05:14
-
-
Save anuviswan/0a4d19ec1d89807fcefb9ae902dcda19 to your computer and use it in GitHub Desktop.
Bootstrapper for Caliburn.Micro with MEF as IoC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MEFBootstrapper:BootstrapperBase | |
{ | |
#region Private Variables | |
private CompositionContainer _Container; | |
#endregion | |
#region Constructor | |
public MEFBootstrapper() | |
{ | |
Initialize(); | |
} | |
#endregion | |
#region Overrides | |
protected override void Configure() | |
{ | |
_Container = new CompositionContainer( | |
new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()) | |
); | |
var batch = new CompositionBatch(); | |
batch.AddExportedValue<IWindowManager>(new WindowManager()); | |
batch.AddExportedValue<IEventAggregator>(new EventAggregator()); | |
batch.AddExportedValue(_Container); | |
_Container.Compose(batch); | |
} | |
protected override object GetInstance(Type service, string key) | |
{ | |
string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(service) : key; | |
var exports = _Container.GetExportedValues<object>(contract); | |
if (exports.Any()) | |
return exports.First(); | |
else | |
throw new Exception("Could not find the key"); | |
} | |
protected override void BuildUp(object instance) | |
{ | |
_Container.SatisfyImportsOnce(instance); | |
} | |
protected override IEnumerable<object> GetAllInstances(Type service) | |
{ | |
return _Container.GetExportedValues<object>(AttributedModelServices.GetContractName(service)); | |
} | |
protected override void OnStartup(object sender, StartupEventArgs e) | |
{ | |
this.DisplayRootViewFor<IShell>(); | |
} | |
#endregion | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment