protected void Application_Start()
{
// Get the application data path.
var appDataPath = new DirectoryPath(AppDomain.CurrentDomain.GetData("DataDirectory").ToString());
// Read all addins.
// TODO: Fix this container hack.
var addinReader = new AddinReader(new FileSystem());
var addins = addinReader.Read(appDataPath.CombineWithFilePath("addins.xml"));
// Define packages.
var packageDefinitions = new List<PackageDefinition>();
packageDefinitions.AddRange(addins.GetAddins()
.Where(x => x.PackageDefinition != null)
.Where(x => x.PackageDefinition.Filters.Count > 0)
.Select(x => x.PackageDefinition));
// Add core packages.
packageDefinitions.Add(new PackageDefinition
{
Filters = new List<string>
{
"/**/Cake.Core.dll",
"/**/Cake.Common.dll",
"/**/Cake.Core.xml",
"/**/Cake.Common.xml"
},
PackageName = "Cake",
Metadata = new CakeMetadata()
});
// Create the document model by downloading the nuget package.
var cakeVersion = (string)null;
var documentModel = NuGetBootstrapper.Download(appDataPath,
new NuGetConfiguration {
Packages = packageDefinitions
}, out cakeVersion);
// Build the DSL model.
var dslModel = DslModelBuilder.Build(documentModel);
// Generate packages.config content.
var packagesConfig = new PackagesConfigContent(cakeVersion);
// Build the container.
var builder = new ContainerBuilder();
builder.RegisterModule<CoreModule>();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterInstance(documentModel).As<DocumentModel>().SingleInstance();
builder.RegisterInstance(dslModel).As<DslModel>().SingleInstance();
builder.RegisterType<DocumentModelResolver>().SingleInstance();
builder.RegisterType<RouteService>().SingleInstance();
builder.RegisterType<UrlResolver>().As<IUrlResolver>().As<UrlResolver>().SingleInstance();
builder.RegisterType<SignatureCache>().SingleInstance();
builder.RegisterType<ApiServices>().SingleInstance();
builder.RegisterType<LanguageProvider>().SingleInstance();
builder.RegisterType<SyntaxRenderer>().SingleInstance();
builder.RegisterType<SignatureRenderer>().SingleInstance();
builder.RegisterType<ApiServices>().SingleInstance();
builder.RegisterInstance(packagesConfig).SingleInstance();
var container = builder.Build();
// Read the topics and register.
var reader = container.Resolve<ITopicReader>();
var topics = reader.Read(appDataPath.CombineWithFilePath("docs.xml"));
// Read all blog entries.
var blogReader = container.Resolve<IBlogReader>();
var blogIndex = blogReader.Parse(appDataPath.Combine("blog"));
// Update the container.
builder = new ContainerBuilder();
builder.RegisterInstance(topics).As<TopicTree>().SingleInstance();
builder.RegisterInstance(blogIndex).As<BlogIndex>().SingleInstance();
builder.RegisterInstance(addins).As<AddinIndex>().SingleInstance();
builder.Update(container);
// Perform registrations.
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}