44 using System . Configuration ;
55 using global ::Umbraco . Core ;
66 using global ::Umbraco . Core . Components ;
7+ using global ::Umbraco . Core . Composing ;
78 using global ::Umbraco . Core . Exceptions ;
8- using global ::Umbraco . Core . IO ;
99
1010 [ RuntimeLevel ( MinLevel = RuntimeLevel . Run ) ]
1111 public class AzureFileSystemComposer : IComposer
1212 {
1313 public void Compose ( Composition composition )
14+ {
15+ //Configuration
16+ var config = CreateConfiguration ( ) ;
17+
18+ //Reads config from AppSetting keys
19+ composition . RegisterUnique ( config ) ;
20+
21+ //Set the Media FS to use our Azure FS with our config from AppSettings
22+ composition . SetMediaFileSystem ( _ => new AzureBlobFileSystem ( config ) ) ;
23+
24+ //Register component that deals with the VirtualPathProvider
25+ composition . Components ( ) . Append < AzureFileSystemComponent > ( ) ;
26+ }
27+
28+ private AzureBlobFileSystemConfig CreateConfiguration ( )
1429 {
1530 var containerName = ConfigurationManager . AppSettings [ Constants . Configuration . ContainerNameKey ] ;
1631 var rootUrl = ConfigurationManager . AppSettings [ Constants . Configuration . RootUrlKey ] ;
1732 var connectionString = ConfigurationManager . AppSettings [ Constants . Configuration . ConnectionStringKey ] ;
1833 var maxDays = ConfigurationManager . AppSettings [ Constants . Configuration . MaxDaysKey ] ;
19- var useDefaultRoute = ConfigurationManager . AppSettings [ Constants . Configuration . UseDefaultRouteKey ] ;
34+ var useDefaultRoute = ConfigurationManager . AppSettings [ Constants . Configuration . UseDefaultRouteKey ] ;
2035 var usePrivateContainer = ConfigurationManager . AppSettings [ Constants . Configuration . UsePrivateContainer ] ;
2136
2237 //Check we have all values set - otherwise make sure Umbraco does NOT boot so it can be configured correctly
@@ -38,8 +53,21 @@ public void Compose(Composition composition)
3853 if ( string . IsNullOrEmpty ( usePrivateContainer ) )
3954 throw new ArgumentNullOrEmptyException ( "usePrivateContainer" , $ "The Azure File System is missing the value '{ Constants . Configuration . UsePrivateContainer } ' from AppSettings") ;
4055
41- composition . SetMediaFileSystem ( _ => new AzureBlobFileSystem ( containerName , rootUrl , connectionString , maxDays , useDefaultRoute , usePrivateContainer ) ) ;
42- composition . Components ( ) . Append < AzureFileSystemComponent > ( ) ;
56+ bool disableVirtualPathProvider = ConfigurationManager . AppSettings [ Constants . Configuration . DisableVirtualPathProviderKey ] != null
57+ && ConfigurationManager . AppSettings [ Constants . Configuration . DisableVirtualPathProviderKey ]
58+ . Equals ( "true" , StringComparison . InvariantCultureIgnoreCase ) ;
59+
60+ return new AzureBlobFileSystemConfig
61+ {
62+ DisableVirtualPathProvider = disableVirtualPathProvider ,
63+ ContainerName = containerName ,
64+ RootUrl = rootUrl ,
65+ ConnectionString = connectionString ,
66+ MaxDays = maxDays ,
67+ UseDefaultRoute = useDefaultRoute ,
68+ UsePrivateContainer = usePrivateContainer
69+ } ;
4370 }
71+
4472 }
4573}
0 commit comments