Я пишу библиотеку классов в .NET, которая оборачивает COM-DLL и предоставляет определенные функциональные возможности для использования другим .NET-кодом. В библиотеке COM определены несколько перечислений, и я использовал некоторые типы перечислений в качестве параметров, например:
//C#
public void TransactionTypeSetByEnum(COMComponent.TransactionType transType)
{
this.TransactionType = transType
}
'VB.NET'
Public Sub TransactionTypeSetByEnum( _
ByVal transType As COMComponent.TransactionType)
Me.TransactionType = transactionType
End Sub
Однако, когда я собираюсь использовать эту оболочку .NET из другого проекта, компилятор не может видеть типы COM (и я не хочу предоставлять их классу потребления). Например ...
netWrappedObject.TransactionTypeSetByEnum( //...No intellisense for the enum
Есть ли способ показать основное неуправляемое перечисление в моей библиотеке-оболочке .NET без добавления неуправляемой библиотеки DLL, ссылающейся на проект, который отвечает за использование этой библиотеки?
Дополнительная справочная информация:
В бизнесе уже есть рабочий код VB6, который был скомпилирован в компонент COM. Компания не хочет переписывать эти компоненты в управляемом коде .NET, но хочет иметь возможность использовать этот существующий код в приложении .NET. Вместо того, чтобы каждое приложение .NET извлекало COM-компонент напрямую, моя цель - написать «обертку» .NET вокруг существующего COM-компонента и предоставить необходимую функциональность с классами и интерфейсами для другого приложения .NET.
Часть моего размышления о том, как использовать дизайн интерфейса для упаковки COM-библиотеки DLL, заключается в следующем: если бизнес решит позже, что было бы лучше переписать существующую COM-библиотеку DLL, чтобы она была на 100% управляемым .NET-кодом, все, что мне нужно было бы do - реализовать интерфейс с новым кодом и изменить существующие приложения для ссылки на новую сборку и, возможно, изменить одну строку кода. Это позволяет избежать необходимости переписывать реализацию библиотеки DLL для каждого приложения .NET.
В моем вопросе выше моя проблема заключается в том, что в COM-библиотеке есть несколько enum
s, которые я хочу показать через .NET-компонент, который «оборачивает» эту DLL. Допустим, у COM-библиотеки есть класс с именем ComFoo
, который имеет вызов перечисления ComFooEnum
. Я хочу, чтобы класс NetFoo
как-то выставлял ComFooEnum
, когда другие проекты потребляют NetFoo
. Я не хочу, чтобы другие проекты ссылались на ComFoo
, чтобы можно было увидеть enum
, выставленный NetFoo
. Если мне придется подражать ComFooEnum
и сделать новый NetFooEnum
, я полагаю, именно это я и сделаю, но мне интересно, есть ли лучший способ.
Вот схема, которая пытается объяснить инкапсуляцию, которую я пытаюсь достичь:
______________________________
| |
| Compiled VB6 COM Assembly |
| Exposes class called |
| ComFoo |
|____________________________|
||
_____________________ ||
| | ||
| Existing VB6 | ||
| Business | < |
| Application | ||
| references ComFoo |
|___________________|
//The business is building new applications in .NET
//that need to consume ComFoo, which cannot be rewritten.
//NetFoo exposes the functionality of ComFoo.
____________________________________
| |
| .NET Wrapper Assembly |
| Exposes class called NetFoo |
| ______________________________ |
| | | |
| | Compiled VB6 COM Assembly | |
| | Exposes class called | |
| | ComFoo | |
| |____________________________| |
|__________________________________|
||
_____________________ ||
| | ||
| New .NET Business | < |
| Order Entry App | ||
| references NetFoo | ||
|___________________| ||
||
_____________________ ||
| | ||
| New .NET Business | ||
| Internet App | < |
| references NetFoo | ||
|___________________|