Пример #1
0
        public RebelComponentRegistrar()
        {
            //determine types that need to be scanned, we only look this up once for perf reasons
            _pluginAssemblies = PluginManager.ReferencedPlugins.Select(x => x.ReferencedAssembly).ToArray();

            _localAssemblies = TypeFinder.GetFilteredBinFolderAssemblies(_pluginAssemblies).ToArray();
        }
Пример #2
0
        public void Build(IContainerBuilder containerBuilder, IBuilderContext context)
        {
            //register model binder provider
            containerBuilder.RegisterModelBinderProvider();

            // Register model binders & controllers
            var allReferencedPluginAssemblies = PluginManager.ReferencedPlugins.Select(x => x.ReferencedAssembly).ToArray();

            containerBuilder
            .RegisterModelBinders(allReferencedPluginAssemblies, _typeFinder)
            .RegisterModelBinders(TypeFinder.GetFilteredBinFolderAssemblies(allReferencedPluginAssemblies), _typeFinder)
            .RegisterControllers(allReferencedPluginAssemblies, _typeFinder)
            .RegisterControllers(TypeFinder.GetFilteredBinFolderAssemblies(allReferencedPluginAssemblies), _typeFinder);

            //register view engines
            containerBuilder.For <EmbeddedRazorViewEngine>().KnownAs <IViewEngine>();
            containerBuilder.For <PluginViewEngine>().KnownAs <IViewEngine>();
            containerBuilder.For <RenderViewEngine>().KnownAs <IViewEngine>();
            containerBuilder.For <AlternateLocationViewEngine>().KnownAs <IViewEngine>();

            //register the route handlers
            containerBuilder.For <RenderRouteHandler>()
            .Named <IRouteHandler>(RenderRouteHandler.SingletonServiceName)
            .ScopedAs.NewInstanceEachTime();

            // register our master controller factory and other IFilteredControllerFactories
            containerBuilder.For <MasterControllerFactory>().KnownAs <IControllerFactory>().ScopedAs.Singleton();
            containerBuilder.For <RenderControllerFactory>().KnownAs <IFilteredControllerFactory>().ScopedAs.Singleton();
            containerBuilder.For <PluginControllerFactory>().KnownAs <IFilteredControllerFactory>().ScopedAs.Singleton();

            //register our rebel area, ensure that the TreeRouteHandler named service is injected for
            //the constructor argument expecting a IRouteHandler
            containerBuilder.For <RebelAreaRegistration>().KnownAsSelf();
            containerBuilder.For <InstallAreaRegistration>().KnownAsSelf();

            //register master view page activator
            containerBuilder.For <MasterViewPageActivator>().KnownAs <IViewPageActivator>().ScopedAs.Singleton();
            //register our IPostViewPageActivators
            containerBuilder.For <RebelContextViewPageActivator>().KnownAs <IPostViewPageActivator>().ScopedAs.Singleton();
            containerBuilder.For <RebelHelperViewPageActivator>().KnownAs <IPostViewPageActivator>().ScopedAs.Singleton();
            containerBuilder.For <RenderViewPageActivator>().KnownAs <IPostViewPageActivator>().ScopedAs.Singleton();

            //register model meta data provider
            containerBuilder.For <RebelModelMetadataProvider>().KnownAs <ModelMetadataProvider>();

            ////register the default controller factory
            ////(We can't put this in the container based on the DependencyResolver because that will cause
            ////an infinite loop. Also, trying to use the Singly registered 'old school' way to get the
            ////ControllerFactory will cause AutoFac to call the DependencyResolver anyways)
            //containerBuilder.For<DefaultControllerFactory>().KnownAs<IControllerFactory>();
        }