using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary2
{
public class a
{ }
public interface IAddIn
{
string DoSomething(int x);
}
public sealed class AddInA : IAddIn
{
public string DoSomething(int x)
{
return "AddInA" + x.ToString();
}
}
public sealed class AddInB : IAddIn
{
public string DoSomething(int x)
{
return "AddInB" + (x * 2).ToString();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Reflection;
using System.IO;
using AddInLibrary;
using ClassLibrary2;
namespace AddInLibrary
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
GetAddInTypes();
}
public void GetAddInTypes()
{
var a = Assembly.LoadFrom(@"E:\ClassLibrary2.dll");
string AddInDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var AddInAssemblies = Directory.EnumerateFiles(AddInDir, "*.dll");
#region 方法1
//var AddInTypes = from file in AddInAssemblies
// let assembly = Assembly.LoadFrom(file)
// from t in assembly.ExportedTypes
// let interfaces =t.GetInterfaces()
// where t.IsClass && interfaces.ToList().Contains(typeof(IAddIn))
// select t;
#endregion
#region 方法2
//var AddInTypes = from file in AddInAssemblies
// let assembly = Assembly.LoadFrom(file)
// from t in assembly.ExportedTypes
// let interfaces = t.GetInterfaces()
// where t.IsClass && t.GetInterface("IAddIn")!=null
// select t;
#endregion
var AddInTypes = from file in AddInAssemblies
let assembly = Assembly.LoadFrom(file)
from t in assembly.ExportedTypes
let interfaces = t.GetInterfaces()
where t.IsClass && typeof(IAddIn).IsAssignableFrom(t)
select t;
foreach (Type t in AddInTypes)
{
IAddIn ai = (IAddIn)Activator.CreateInstance(t);
dog.Items.Add(ai.DoSomething(5));
}
}
}
}