Hi,
I debugged my FogBugz plugin which implements IPluginBugDisplay and I see that its constructor is being called every time a bug is displayed. I see the following call stack:
MyPlugin.DLL!MyNamespace.CMyPlugin.CMyPlugin(FogCreek.FogBugz.Plugins.Api.CPluginApi api = {FogCreek.FogBugz.Plugins.Api.CPluginApi}) Line 49 C#
[External Code]
FogBugz.DLL!FogCreek.FogBugz.CPluginCache.CreateInstance(int ixPlugin = 14, string sType = "MyNamespace.CMyPlugin") Line 247 + 0xe5 bytes C#
FogBugz.DLL!FogCreek.FogBugz.CPluginCache.GetInstance(int ixPlugin = 14, string sType = "MyNamespace.CMyPlugin") Line 220 + 0x8d bytes C#
FogBugz.DLL!FogCreek.FogBugz.CPlugin.Instance.get() Line 94 + 0x61 bytes C#
FogBugz.DLL!FogCreek.FogBugz.CPluginCache.Lambda_PluginsForInterface_8.__Run(FogCreek.FogBugz.CPlugin plugin = {FogCreek.FogBugz.CPlugin}) Line 203 + 0xb bytes C#
FogBugz.DLL!FogCreek.Core.Arrays.FilterCPlugin(FogCreek.FogBugz.CPlugin[] rgIn = {FogCreek.FogBugz.CPlugin[1]}, Wasabi.Runtime.Functional.Function<FogCreek.FogBugz.CPlugin,bool> fx = {Method = {Boolean __Run(FogCreek.FogBugz.CPlugin)}}) Line 10411 + 0x1f bytes C#
FogBugz.DLL!FogCreek.FogBugz.CPluginCache.PluginsForInterface(string sInterfaceName = "IPluginBugDisplay") Line 202 + 0x44 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.HaveBugDisplayPlugins() Line 855 + 0x41 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.BugFields(FogCreek.FogBugz.CBug c = {FogCreek.FogBugz.CBug}, FogCreek.FogBugz.CPerson cp = {FogCreek.FogBugz.CPerson}, string sCommand = "view", bool fMultipleBugs = false, bool fNewBug = false, string[] rgBugs = {string[1]}, FogCreek.FogBugz.CBug[] rgCBug = {FogCreek.FogBugz.CBug[1]}, int ixBugEventLatest = -2147483648, string sMiniGridId = "miniBugList") Line 404 + 0x14 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.EditBugPage(string sCommand = "view", int ixBugEventLatest = -2147483648, int ixDiscussTopic = -2147483648, bool fShowLastEvent = false, bool fNewBug = false, int ixScreenshot = 0) Line 1112 + 0x35 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.RawpgEditBug() Line 3100 + 0x129 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.pgEditBug() Line 1338 + 0x9 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.RunPg() Line 2981 + 0xc bytes C#
[External Code]
FogBugz.DLL!FogCreek.FogBugz.__Global.RawRunFogBugz() Line 4316 + 0x42 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.RunFogBugz() Line 2299 + 0x9 bytes C#
FogBugz.DLL!FogCreek.FogBugz.__Global.StartDefault() Line 126 + 0x9 bytes C#
I thought that plugin's constructor should be called only once, the first time plugin is loaded by FogBugz. Am I wrong on this point?
I see that CPluginCache.GetInstance() alsways calls CPluginCache.CreateInstance() which seems a little bit strange to me and in my opinion causes the behavior described below. It looks like plugin is not really cached.
Does anyone know if this is a valid behavior or some kind of misconfiguration?
Thanks, Mateo