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>
Немає коментарів:
Дописати коментар