我正在尝试在我的一个模块中注册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.RegisterVirtualPath Provider,因此:
HostingEnvironment.RegisterVirtualPathProvider(new AzureVirtualPathProvider());
并尝试使用property Injection注入依赖项:
builder.Register(c => new AzureVirtualPathProvider { StaticDataStorageProvider = c.Resolve<IStaticDataStorageProvider>() });
但是,在运行AzureVirtualPathProvider时,StaticDataStorageProvider的值始终为null。
我尝试将AzureVirtualPathProvider移动到OrchardFramework,但它无法解析StaticDataStorageProvider。
如何让Orchard加载我的CustomVirtualPathProvider?