|
using System;
using System.Net;
using System.Windows;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using Slex.Lib.Interactions;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
namespace Slex.Lib.Composition
{
/// <summary>
/// To compose the available behaviours and triggers, so that they can be imported later
/// </summary>
public class SlexPartComposer
{
static SlexPartComposer Instance { get; set; }
[ImportMany]
public Lazy<Func<object, IObservable<EventResult>>, IExportName>[] Senders { get; set; }
private SlexPartComposer() { }
static SlexPartComposer()
{
Compose();
}
/// <summary>
/// Resolve an exported function
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static Func<object, IObservable<EventResult>> Resolve(string name)
{
var senders = Instance.Senders;
foreach (var s in senders)
{
var x = s.Value;
var y = s.Metadata;
}
return senders.FirstOrDefault(s => s.Metadata.ExportName == name).Value;
}
/// <summary>
/// Compose ..
/// </summary>
public static void Compose(ComposablePartCatalog c)
{
Instance = new SlexPartComposer();
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(c);
var container = new CompositionContainer(catalog);
container.ComposeParts(Instance);
}
internal static void Compose()
{
Compose(new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()));
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Architect, Developer, Speaker | Wannabe GUT inventor & Data Scientist | Microsoft MVP in C#