Я наконец нашел ключ к моей проблеме.Я использовал исходный код «Castle.Monorail.Framework.dll», чтобы увидеть, что происходит внутри: кажется, что сборки, указанные в файле Web.Config (в <Controllers>
или даже в <viewcomponents>
), не «проверяются», как онидолжно быть потому, что переменная, которая содержит его, инициализируется слишком поздно.
Я собрал новую версию библиотеки DLL, и теперь она работает нормально.Я отправлю свой «исправленный» код сообществу Castle Project, чтобы убедиться, что он не является следствием чего-то другого (например, плохих настроек).
Пока вот мое «исправление», я просто переместил частькод.Вы можете найти оригинальный исходный код здесь: http://www.symbolsource.org/Public/Metadata/Default/Project/Castle/1.0-RC3/Debug/All/Castle.MonoRail.Framework/Castle.MonoRail.Framework/Services/DefaultViewComponentFactory.cs
*Assembly:* Castle.MonoRail.Framework
*Class:* Castle.MonoRail.Framework.Services.**DefaultViewComponentFactory**
public override void Service(IServiceProvider provider)
{
/* Here is the section I moved */
var config = (IMonoRailConfiguration)provider.GetService(typeof(IMonoRailConfiguration));
if (config != null)
{
assemblies = config.ViewComponentsConfig.Assemblies;
if (assemblies == null || assemblies.Length == 0)
{
// Convention: uses the controller assemblies in this case
assemblies = config.ControllersConfig.Assemblies.ToArray();
}
}
/*******************************/
base.Service(provider); // Assemblies inspection is done there
var loggerFactory = (ILoggerFactory) provider.GetService(typeof(ILoggerFactory));
if (loggerFactory != null)
{
logger = loggerFactory.Create(typeof(DefaultViewComponentFactory));
}
/* The moved section was here */
}