.NET & COM - Class_Terminate / удаление объекта, когда он выходит из области видимости - PullRequest
1 голос
/ 06 марта 2009

Насколько я понимаю, для COM-объекта VB6, когда он выходит из области видимости, Class_Terminate немедленно вызывается для объекта, чтобы он мог очиститься.

Возможно ли иметь такую ​​же функциональность для объекта .NET, вызываемого COM?

История вопроса основана на статье MSDN: http://msdn.microsoft.com/en-us/library/aa479313.aspx

При этом объект Session на странице ASP заменяется пользовательским объектом, который сериализует информацию о сеансе обратно в базу данных, как только страница заканчивается, используя Class_Terminate.

Я хочу реализовать объект в .NET, однако, поскольку GC не будет вызывать финализатор немедленно, это немного проблематично, так как я не хочу ждать, пока объект будет очищен, прежде чем сериализуется обратно в базу данных.

Я мог бы просто реализовать IDisposiable и вручную вызывать Dispose () после завершения сеанса, но для этого потребовалось бы изменить каждую существующую классическую страницу ASP, а не просто включить несколько строк в стандартный файл включения.

Так есть ли способ автоматически вызывать код для выполнения работы, необходимой после завершения страницы? :)

1 Ответ

3 голосов
/ 06 марта 2009

Делегирование. Оберните .NET COM-класс в VB6 Com-класс, который является оболочкой, и в событии Class_Terminate вызова обертки dispose.

Если вы не хотите переопределять весь интерфейс в COM-классе VB6, тогда вы можете сделать что-то вроде

Public MyNETCOMObject as MyNETCOMObject

Private Class_Initialize()
  Set MyNETCOMObject = New MyNetCOMObject
End Sub

Private Class_Terminate()
  If Not MyNETCOMObject = Nothing then MyNETCOMObject.Dispose
  Set MyNETCOMObject = Nothing
End Sub
...