It was originally decided, without much discussion, that old V3 extensions would not be supported in V4, but would need to be rewritten to use the new interfaces. See #1009. However, this will be quite inconvenient for users, while waiting for the old extensions to be re-issued.
On re-examination, it seems feasible to support old extensions by use of reflection. This will introduce performance issues for extensions which are called frequently, but is still an improvement over not supporting them at all.
A experimental spike already exists, which creates a wrapper for each old extension using the new interfaces. That implementation injects the wrapper at the point where each type of extension is used. It includes a method cache for each extension point to avoid the work of acquiring the MethodInfo each time a call is made.
I'll use the same wrappers and caching mechanism for this issue but will try to wrap and inject the old interfaces centrally, at the point where ExtensionManager creates the ExtensionNode representing an extension.
@nunit/core-team @nunit/engine-team @nunit/team-city-team
It was originally decided, without much discussion, that old V3 extensions would not be supported in V4, but would need to be rewritten to use the new interfaces. See #1009. However, this will be quite inconvenient for users, while waiting for the old extensions to be re-issued.
On re-examination, it seems feasible to support old extensions by use of reflection. This will introduce performance issues for extensions which are called frequently, but is still an improvement over not supporting them at all.
A experimental spike already exists, which creates a wrapper for each old extension using the new interfaces. That implementation injects the wrapper at the point where each type of extension is used. It includes a method cache for each extension point to avoid the work of acquiring the
MethodInfoeach time a call is made.I'll use the same wrappers and caching mechanism for this issue but will try to wrap and inject the old interfaces centrally, at the point where
ExtensionManagercreates theExtensionNoderepresenting an extension.@nunit/core-team @nunit/engine-team @nunit/team-city-team