簡體   English   中英

如何編寫一個可以輕松與多個第三方com對象一起使用的Windows應用程序?

[英]How to write a windows application that can easily work with multiple third party com object?

我有一個與第三方COM對象緊密耦合的Windows應用程序。 通過這個com對象的實例,我要做的就是創建,刪除,保存和導出。 現在,隨着新要求的出現,我不得不添加另一個類似的第三方組件,但來自不同的供應商。

我不想編寫與第一個應用程序類似的單獨應用程序,但第三方依賴項已更改。

我應該如何更改Windows應用程序,以便

  1. 我可以輕松切換這些第三方依賴項。 (例如松散耦合的東西)。
  2. 我不需要維護單獨的代碼。

我需要一些指示。

一種選擇(可能不適合您)是編寫一個所有插件都將繼承的接口,其中包含您需要從每個COM .dll實現的內容的抽象方法。 然后,每個插件都是一個C#類庫,該類實現該接口,並將所有調用傳遞給后端COM對象。

這意味着您將交付3個新的DLL,一個包含您的接口(並由主應用程序和.NET類庫引用),一個.NET類庫作為主“插件”,然后是后端COM。 dll也。

就像我說的那樣,這只是其中一種方法,但是它將以很少的IMO開銷使您快速啟動並運行。


簡單的例子:

IPlugin.cs [IPlugin.dll]

interface IPlugin
{
    bool MethodReturningTrue();
}

YourPlugin.cs [YourPlugin.dll,引用IPlugin.dll]

class YourPlugin : IPlugin
{
    public bool MethodReturningTrue()
    {
        return true;
    }
}

PluginHost.cs [yourapp.exe,參考IPlugin.dll]

class PluginHost
{
    public static IPlugin GetPlugin()
    {
        Assembly asmbly = Assembly.LoadFrom("YourPlugin.dll");
        Type objectType = asmbly.GetType("YourPlugin");
        return (IPlugin)Activator.CreateInstance(objectType);
    }
}

PluginUser.cs [yourapp.exe,引用IPlugin.dll]

class PluginUser
{
    public bool GetTrueValueFromPlugin()
    {
        IPlugin pluginObj = PluginHost.GetPlugin();
        pluginObj.MethodReturningTrue();
    }
}

當然,這依賴於在“ YourPlugin.dll”中被稱為“ YourPlugin”的類。 在支持多個.dll的生產環境中,您將枚舉.dll,加載每個程序集,並使用Reflection在該程序IPlugin查找實現IPlugin接口的類。 如果您需要插件和主機之間的雙向通信,則可以創建另一個接口(即IPluginHost ),然后向IPlugin添加一個接受IPluginHost實例的IPluginHost 然后,實現類可以存儲該實例並調用方法以將兩種方式的通信都放在適當的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM