I\'ve got a number of classes which implement IDessertPlugin
. These are found in various DLLs which I use MEF to spin up instances of them to use as plug-in functi
So, the solution to my problem was pretty straightforward after the parts have been composed. I was trying to dig down into the MEF objects themselves rather than look into the container that holds all the plug-ins I've loaded. The answer was to totally ignore the fact of how those plug-ins were being loaded and just look at the instantiated objects themselves.
My plugin managing code has an entry like so:
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
and once the container parts composition has taken place, I could iterate through my plug-ins like so:
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}
You can get assembly info from different properties AssemblyVersion
, AssemblyFileVersion
and AssemblyDescription
.
/// <summary>
/// This class provide inforamtion about product version.
/// </summary>
public class ProductVersion
{
private readonly FileVersionInfo fileVersionInfo;
private readonly AssemblyName assemblyName;
private ProductVersion(Type type)
{
// it done this way to prevent situation
// when site has limited permissions to work with assemblies.
var assembly = Assembly.GetAssembly(type);
fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
assemblyName = new AssemblyName(assembly.FullName);
}
public string AssemblyFileVersion
{
get
{
return fileVersionInfo.FileVersion;
}
}
public string AssemblyVersion
{
get
{
return assemblyName.Version.ToString();
}
}
}