在之前的文章中,我们已经了解了Mussel插件项目树的结构及插件简单的制作方式,今天我们来看看如何对Mussel的插件项目进行调用。
我们想像一下有这样的一个应用场景:我们需要对两个数值运算并返回一个结果,这个运算交由一个独立的运算过程来进行,我们并不关心运算的具体细节,我们只需要运算过程返回一个结果,先来看看这个运算接口的定义
运算服务的接口(程序集:Unit4.Contract.dll)
- namespace Unit4
- {
- public interface IMath
- {
- int Calculate(int value1, int value2);
- }
- }
接下来,我们分别以加法及乘法的方式来实现这个运算,并制作成Mussel的插件项目
以加法的方式实现运算服务(程序集:Unit4.Implement.dll)
- using System;
- using Mussel.Addins;
- namespace Unit4
- {
- [MusselType("MathOne")]
- public class MathOne : AddinItem, IMath
- {
- public int Calculate(int value1, int value2)
- {
- Console.WriteLine("{0} + {1} = {2}",
- value1, value2, value1 + value2);
- return value1 + value2;
- }
- }
- }
以乘法的方式实现运算服务(程序集:Unit4.Implement.dll)
- using System;
- using Mussel.Addins;
- namespace Unit4
- {
- [MusselType("MathTwo")]
- public class MathTwo:AddinItem,IMath
- {
- public int Calculate(int value1, int value2)
- {
- Console.WriteLine("{0} * {1} = {2}",
- value1, value2, value1 * value2);
- return value1 * value2;
- }
- }
- }
插件项目的实现已经完成,我们来看看如何通过Mussel的加载器加载并调用插件项目
Console应用程序的代码
- using System;
- using Mussel;
- namespace Unit4
- {
- class Program
- {
- static void Main()
- {
- MusselService service = new MusselService();
- service.Start();
- IMath mathOne =
- service.Container["/Core/Services,MathOne"] as IMath;
- if (mathOne != null) mathOne.Calculate(100, 150);
- IMath mathTwo =
- service.Container["/Core/Services,MathTwo"] as IMath;
- if (mathTwo != null) mathTwo.Calculate(100, 150);
- Console.ReadLine();
- service.Dispose();
- }
- }
- }
配置文件
- <?xml version="1.0" encoding="utf-8" ?>
- <Addin Name="Core">
- <ReferenceAssemblies>
- <Reference AssemblyFile="Unit4.Implement.dll" IsMusselAssembly="true"/>
- </ReferenceAssemblies>
- <AddinNode Path="/Core/Services">
- <AddinItem ClassKey="MathOne"/>
- <AddinItem ClassKey="MathTwo"/>
- </AddinNode>
- </Addin>
看到了吗?从外部访问Mussel的插件项目相当的简单,只需要如下的语句:
IMath mathOne = service.Container["/Core/Services,MathOne"] as IMath;
中括号里的内容是插件项目的全路径。
我们欣赏一下执行的结果: