Я работаю над плагином-интерфейсом для виджетов в приложении MVC 3.Виджеты должны содержать там свои модели, представления и контроллеры.Затем я хочу иметь возможность просто вставить dll (mvc-project "Widget") в папку плагина в моем главном приложении.
Но как мне обратиться к нему, когда он загружается динамически?Я не могу сделать как myapp.plugin.clock, то я получаю ошибку компиляции, сборка загружается в Rumtime !?я должен использовать динамический?
Это код, который я использую для загрузки плагинов, и он, кажется, работает.Теперь я не знаю, как правильно использовать загруженную сборку, есть идеи?
[assembly: PreApplicationStartMethod(typeof(MyApp.PluginActivator), "Initialize")]
public class PluginActivator
{
private static readonly DirectoryInfo PluginFolderInfo;
static PluginActivator()
{
PluginFolderInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/plugins"));
}
public static void Initialize()
{
CopyPluginDlls(PluginFolderInfo, AppDomain.CurrentDomain.DynamicDirectory);
LoadPluginAssemblies(AppDomain.CurrentDomain.DynamicDirectory);
}
private static void CopyPluginDlls(DirectoryInfo sourceFolder, string destinationFolder)
{
foreach (var plug in sourceFolder.GetFiles("*.dll", SearchOption.AllDirectories))
{
if (!File.Exists(Path.Combine(destinationFolder, plug.Name)))
{
File.Copy(plug.FullName, Path.Combine(destinationFolder, plug.Name), false);
}
}
}
public static void LoadPluginAssemblies(string dynamicDirectory)
{
foreach (var plug in Directory.GetFiles(dynamicDirectory, "*.dll", SearchOption.AllDirectories))
{
Assembly assembly = Assembly.Load(AssemblyName.GetAssemblyName(plug));
BuildManager.AddReferencedAssembly(assembly);
}
}
}