Я пытаюсь зарегистрировать ICustomVirtualPathProvider в одном из моих модулей.Это то, что я пытаюсь использовать:
public class AzureVirtualPathProvider : VirtualPathProvider, ICustomVirtualPathProvider
{
public IStaticDataStorageProvider StaticDataStorageProvider { get; set; }
public VirtualPathProvider Instance
{
get
{
return this;
}
}
public AzureVirtualPathProvider(IStaticDataStorageProvider staticDataStorageProvider)
{
StaticDataStorageProvider = staticDataStorageProvider;
}
public override bool FileExists(string virtualPath)
{
if (!virtualPath.Contains("StaticData")) return base.FileExists(virtualPath);
return true;
}
public override VirtualFile GetFile(string virtualPath)
{
if (!virtualPath.Contains("StaticData") || !StaticDataStorageProvider.IsCloud()) return base.GetFile(virtualPath);
return new CustomVirtualFile(StaticDataStorageProvider, virtualPath);
}
}
, поэтому в Module.Load я устанавливаю:
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<AzureVirtualPathProvider>().PropertiesAutowired().As<ICustomVirtualPathProvider>();
}
, но это не было обнаружено, когда Orchard вызывает эту строку в OrchardStartup.cs (в Orchard.Framework)
if (HostingEnvironment.IsHosted) {
foreach (var vpp in container.Resolve<IEnumerable<ICustomVirtualPathProvider>>()) {
HostingEnvironment.RegisterVirtualPathProvider(vpp.Instance);
}
}
Я пытался вызвать HostingEnvironment.RegisterVirtualPathProvider напрямую, таким образом:
HostingEnvironment.RegisterVirtualPathProvider(new AzureVirtualPathProvider());
и пытался внедрить зависимость, используя инъекцию свойства:
builder.Register(c => new AzureVirtualPathProvider { StaticDataStorageProvider = c.Resolve<IStaticDataStorageProvider>() });
однако значение для StaticDataStorageProvider всегда равно нулю при запуске AzureVirtualPathProvider.
Я пытался переместить AzureVirtualPathProvider в OrchardFramework, но затем он не разрешает StaticDataStorageProvider.
Как заставить Orchard загрузить мой CustomVirtualPathProvider?