пʼятниця, 7 березня 2008 р.

Addin друга спроба (Mono, Plugin)

http://en.wikipedia.org/wiki/Plugin
http://www.mono-project.com/Introduction_to_Mono.Addins

Є багато причин чому ви можете вирішити дописувати розширення для ваших продуктів:
  • Дозволити стороннім розробникам розширювати чи змінювати можливості програми.
  • Підтримувати можливості ще не передбачені.
  • Зменшити розмір основної програми.
  • Розділити код через проблеми пов'язані з ліцензуванням.

.Net & MONO бачення:


Модель Mono.Addins складається з 4-х компонентів:
  • Add-in host: розширяєма за допомогою додатків програма чи бібліотека.
  • Extension point: місця де додатки реєструють типи розширень.
  • Extension node: елемент що має атрибути що описують розширення. Точки (місця) розширень можуть декларувати типи розширень з якими вони працюють.
  • Add-in: набір файлів які реєструють нові гілки в одній або декількох точках розширення визначених розширюваною програмою.
Приклад:
Реалізуємо текстовий редактор що буде розширений за допомогою додатків.


ICommand library (TextEditorLib.dll)

[assembly:AddinRoot ("TextEditor", "1.0")]

[TypeExtensionPoint]
public interface ICommand
{
void Run ();
}

An add-in (SampleAddin.dll)

[assembly:Addin]
[assembly:AddinDependency ("TextEditor", "1.0")]

[Extension]
class HelloWorldExtension: ICommand
{
public void Run ()
{
Console.WriteLine ("Hello World");
}
}

The host application (TextEditor.exe)

public class Application
{
public static void Main ()
{
AddinManager.Initialize ();
foreach (ICommand cmd in AddinManager.GetExtensionObjects (typeof(ICommand)))
cmd.Run ();
}
}

This is what the manifest for the TextEditor host would look like:

<Addin id="TextEditor" version="1.0" isroot="true">
<Runtime>
<Import assembly="TextEditor.exe"/>
<Import assembly="TextEditorLib.dll"/>
</Runtime>
<ExtensionPoint path = "/TextEditor/TypeExtensions/ICommand">
<ExtensionNode objectType="ICommand"/>
</ExtensionPoint>
</Addin>

And this could be the manifest for the add-in:


<Addin>
<Runtime>
<Import assembly="SampleAddin.dll"/>
</Runtime>
<Dependencies>
<Addin id="TextEditor" version="1.0" />
</Dependencies>
<Extension path = "/TextEditor/TypeExtensions/ICommand">
<Type type="HelloWorldExtension" />
</Extension>
</Addin>

Немає коментарів:

Дописати коментар