Exemple #1
0
 /// <summary>
 /// Throws exception says that given type was not found in any accessible assembly
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 /// <param name="type">Type that was not found</param>
 public static void ThrowTypeNotFound(IAssemblyCatalog assemblyCatalog, string type)
 {
     throw new NotSupportedException(string.Format(
         "Unable to discover CLR Type for model by the name of {0}.\n\nTry using a fully qualified type name and ensure that the assembly is added to the configuration file.\n\nCurrent IAssemblyCatalog assemblies:\n\t{1}.",
         type,
         assemblyCatalog.GetAssemblies().Select(a => a.FullName).Aggregate((n1, n2) => n1 + "\n\t" + n2)));
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyVisualBasicRazorCodeParser"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyVisualBasicRazorCodeParser(IAssemblyCatalog assemblyCatalog)
        {
            this.assemblyCatalog = assemblyCatalog;
            this.MapDirective(ModelTypeKeyword, this.ModelTypeDirective);

            this.clrTypeResolver = new VisualBasicClrTypeResolver(assemblyCatalog);
        }
 /// <summary>
 /// Creates a new instance of the <see cref="DefaultDiagnostics"/> class.
 /// </summary>
 /// <param name="diagnosticProviders"></param>
 /// <param name="rootPathProvider"></param>
 /// <param name="requestTracing"></param>
 /// <param name="configuration"></param>
 /// <param name="modelBinderLocator"></param>
 /// <param name="responseProcessors"></param>
 /// <param name="routeSegmentConstraints"></param>
 /// <param name="cultureService"></param>
 /// <param name="requestTraceFactory"></param>
 /// <param name="routeMetadataProviders"></param>
 /// <param name="textResource"></param>
 /// <param name="environment"></param>
 /// <param name="typeCatalog"></param>
 /// <param name="assemblyCatalog"></param>
 public DefaultDiagnostics(
     IEnumerable<IDiagnosticsProvider> diagnosticProviders,
     IRootPathProvider rootPathProvider,
     IRequestTracing requestTracing,
     NancyInternalConfiguration configuration,
     IModelBinderLocator modelBinderLocator,
     IEnumerable<IResponseProcessor> responseProcessors,
     IEnumerable<IRouteSegmentConstraint> routeSegmentConstraints,
     ICultureService cultureService,
     IRequestTraceFactory requestTraceFactory,
     IEnumerable<IRouteMetadataProvider> routeMetadataProviders,
     ITextResource textResource,
     INancyEnvironment environment,
     ITypeCatalog typeCatalog,
     IAssemblyCatalog assemblyCatalog)
 {
     this.diagnosticProviders = diagnosticProviders;
     this.rootPathProvider = rootPathProvider;
     this.requestTracing = requestTracing;
     this.configuration = configuration;
     this.modelBinderLocator = modelBinderLocator;
     this.responseProcessors = responseProcessors;
     this.routeSegmentConstraints = routeSegmentConstraints;
     this.cultureService = cultureService;
     this.requestTraceFactory = requestTraceFactory;
     this.routeMetadataProviders = routeMetadataProviders;
     this.textResource = textResource;
     this.environment = environment;
     this.typeCatalog = typeCatalog;
     this.assemblyCatalog = assemblyCatalog;
 }
 /// <summary>
 /// Creates a new instance of the <see cref="DefaultDiagnostics"/> class.
 /// </summary>
 /// <param name="diagnosticProviders"></param>
 /// <param name="rootPathProvider"></param>
 /// <param name="requestTracing"></param>
 /// <param name="configuration"></param>
 /// <param name="modelBinderLocator"></param>
 /// <param name="responseProcessors"></param>
 /// <param name="routeSegmentConstraints"></param>
 /// <param name="cultureService"></param>
 /// <param name="requestTraceFactory"></param>
 /// <param name="routeMetadataProviders"></param>
 /// <param name="textResource"></param>
 /// <param name="environment"></param>
 /// <param name="typeCatalog"></param>
 /// <param name="assemblyCatalog"></param>
 /// <param name="acceptHeaderCoercionConventions"></param>
 public DefaultDiagnostics(
     IEnumerable <IDiagnosticsProvider> diagnosticProviders,
     IRootPathProvider rootPathProvider,
     IRequestTracing requestTracing,
     NancyInternalConfiguration configuration,
     IModelBinderLocator modelBinderLocator,
     IEnumerable <IResponseProcessor> responseProcessors,
     IEnumerable <IRouteSegmentConstraint> routeSegmentConstraints,
     ICultureService cultureService,
     IRequestTraceFactory requestTraceFactory,
     IEnumerable <IRouteMetadataProvider> routeMetadataProviders,
     ITextResource textResource,
     INancyEnvironment environment,
     ITypeCatalog typeCatalog,
     IAssemblyCatalog assemblyCatalog,
     AcceptHeaderCoercionConventions acceptHeaderCoercionConventions)
 {
     this.diagnosticProviders             = diagnosticProviders;
     this.rootPathProvider                = rootPathProvider;
     this.requestTracing                  = requestTracing;
     this.configuration                   = configuration;
     this.modelBinderLocator              = modelBinderLocator;
     this.responseProcessors              = responseProcessors;
     this.routeSegmentConstraints         = routeSegmentConstraints;
     this.cultureService                  = cultureService;
     this.requestTraceFactory             = requestTraceFactory;
     this.routeMetadataProviders          = routeMetadataProviders;
     this.textResource                    = textResource;
     this.environment                     = environment;
     this.typeCatalog                     = typeCatalog;
     this.assemblyCatalog                 = assemblyCatalog;
     this.acceptHeaderCoercionConventions = acceptHeaderCoercionConventions;
 }
Exemple #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyVisualBasicRazorCodeParser"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyVisualBasicRazorCodeParser(IAssemblyCatalog assemblyCatalog)
        {
            this.assemblyCatalog = assemblyCatalog;
            this.MapDirective(ModelTypeKeyword, this.ModelTypeDirective);

            this.clrTypeResolver = new VisualBasicClrTypeResolver(assemblyCatalog);
        }
        private static TinyIoCContainer ConfigureContainer(IEnumerable<IDiagnosticsProvider> providers, IRootPathProvider rootPathProvider, IRequestTracing requestTracing, NancyInternalConfiguration configuration, INancyEnvironment diagnosticsEnvironment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
        {
            var diagContainer = new TinyIoCContainer();

            diagContainer.Register<IInteractiveDiagnostics, InteractiveDiagnostics>();
            diagContainer.Register<IRequestTracing>(requestTracing);
            diagContainer.Register<IRootPathProvider>(rootPathProvider);
            diagContainer.Register<NancyInternalConfiguration>(configuration);
            diagContainer.Register<IModelBinderLocator, DefaultModelBinderLocator>();
            diagContainer.Register<IBinder, DefaultBinder>();
            diagContainer.Register<IFieldNameConverter, DefaultFieldNameConverter>();
            diagContainer.Register<BindingDefaults, BindingDefaults>();
            diagContainer.Register<INancyEnvironment>(diagnosticsEnvironment);
            diagContainer.Register<ISerializer>(new DefaultJsonSerializer(diagnosticsEnvironment));
            diagContainer.Register<ITypeCatalog>(typeCatalog);
            diagContainer.Register<IAssemblyCatalog>(assemblyCatalog);


            foreach (var diagnosticsProvider in providers)
            {
                var key = string.Concat(
                    diagnosticsProvider.GetType().FullName,
                    "_",
                    diagnosticsProvider.DiagnosticObject.GetType().FullName);

                diagContainer.Register<IDiagnosticsProvider>(diagnosticsProvider, key);
            }

            foreach (var moduleType in typeCatalog.GetTypesAssignableTo<DiagnosticModule>())
            {
                diagContainer.Register(typeof(INancyModule), moduleType, moduleType.FullName).AsMultiInstance();
            }

            return diagContainer;
        }
Exemple #7
0
 public FakeDiagnostics(
     IRootPathProvider rootPathProvider,
     IRequestTracing requestTracing,
     NancyInternalConfiguration configuration,
     IModelBinderLocator modelBinderLocator,
     IEnumerable <IResponseProcessor> responseProcessors,
     IEnumerable <IRouteSegmentConstraint> routeSegmentConstraints,
     ICultureService cultureService,
     IRequestTraceFactory requestTraceFactory,
     IEnumerable <IRouteMetadataProvider> routeMetadataProviders,
     ITextResource textResource,
     INancyEnvironment environment,
     ITypeCatalog typeCatalog,
     IAssemblyCatalog assemblyCatalog)
 {
     this.diagnosticProviders     = (new IDiagnosticsProvider[] { new FakeDiagnosticsProvider() }).ToArray();
     this.rootPathProvider        = rootPathProvider;
     this.requestTracing          = requestTracing;
     this.configuration           = configuration;
     this.modelBinderLocator      = modelBinderLocator;
     this.responseProcessors      = responseProcessors;
     this.routeSegmentConstraints = routeSegmentConstraints;
     this.cultureService          = cultureService;
     this.requestTraceFactory     = requestTraceFactory;
     this.routeMetadataProviders  = routeMetadataProviders;
     this.textResource            = textResource;
     this.environment             = environment;
     this.typeCatalog             = typeCatalog;
     this.assemblyCatalog         = assemblyCatalog;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyCSharpRazorCodeParser"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyCSharpRazorCodeParser(IAssemblyCatalog assemblyCatalog)
        {
            this.assemblyCatalog = assemblyCatalog;
            this.MapDirectives(this.ModelDirective, "model");

            this.clrTypeResolver = new CSharpClrTypeResolver(assemblyCatalog);
        }
Exemple #9
0
 public static BootstrapperFactory Create(ModuleLoader moduleLoader,
                                          IAssemblyCatalog assemblyCatalog,
                                          BootstrapperOptions options)
 {
     return(new BootstrapperFactory(moduleLoader, assemblyCatalog,
                                    new OptionsWrapper <BootstrapperOptions>(options)));
 }
Exemple #10
0
 /// <summary>
 /// Throws exception says that given type was not found in any accessible assembly
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 /// <param name="type">Type that was not found</param>
 public static void ThrowTypeNotFound(IAssemblyCatalog assemblyCatalog, string type)
 {
     throw new NotSupportedException(string.Format(
                                         "Unable to discover CLR Type for model by the name of {0}.\n\nTry using a fully qualified type name and ensure that the assembly is added to the configuration file.\n\nCurrent IAssemblyCatalog assemblies:\n\t{1}.",
                                         type,
                                         assemblyCatalog.GetAssemblies().Select(a => a.FullName).Aggregate((n1, n2) => n1 + "\n\t" + n2)));
 }
Exemple #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyCSharpRazorCodeParser"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyCSharpRazorCodeParser(IAssemblyCatalog assemblyCatalog)
        {
            this.assemblyCatalog = assemblyCatalog;
            this.MapDirectives(this.ModelDirective, "model");

            this.clrTypeResolver = new CSharpClrTypeResolver(assemblyCatalog);
        }
Exemple #12
0
 public BootstrapperFactory(ModuleLoader moduleLoader,
                            IAssemblyCatalog assemblyCatalog,
                            IOptions <BootstrapperOptions> options)
 {
     _moduleLoader    = moduleLoader;
     _assemblyCatalog = assemblyCatalog;
     _options         = options;
 }
Exemple #13
0
 public Bootstrapper(ModuleLoader moduleLoader, IServiceCollection serviceCollection,
                     IAssemblyCatalog assemblyCatalog, IOptions <BootstrapperOptions> options)
 {
     _moduleLoader      = moduleLoader;
     _serviceCollection = serviceCollection;
     _assemblyCatalog   = assemblyCatalog;
     _options           = options;
 }
Exemple #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RazorViewEngine"/> class.
 /// </summary>
 /// <param name="configuration">The <see cref="IRazorConfiguration"/> that should be used by the engine.</param>
 /// <param name="environment">An <see cref="INancyEnvironment"/> instance.</param>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 public RazorViewEngine(IRazorConfiguration configuration, INancyEnvironment environment, IAssemblyCatalog assemblyCatalog)
 {
     this.razorAssemblyProvider = new RazorAssemblyProvider(configuration, assemblyCatalog);
     this.viewRenderer = new CSharpRazorViewRenderer(this.razorAssemblyProvider);
     this.razorConfiguration = configuration;
     this.traceConfiguration = environment.GetValue<TraceConfiguration>();
     this.AddDefaultNameSpaces(this.viewRenderer.Host);
 }
Exemple #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RazorViewEngine"/> class.
 /// </summary>
 /// <param name="configuration">The <see cref="IRazorConfiguration"/> that should be used by the engine.</param>
 /// <param name="environment">An <see cref="INancyEnvironment"/> instance.</param>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 public RazorViewEngine(IRazorConfiguration configuration, INancyEnvironment environment, IAssemblyCatalog assemblyCatalog)
 {
     this.viewRenderer       = new CSharpRazorViewRenderer(assemblyCatalog);
     this.razorConfiguration = configuration;
     this.assemblyCatalog    = assemblyCatalog;
     this.traceConfiguration = environment.GetValue <TraceConfiguration>();
     this.AddDefaultNameSpaces(this.viewRenderer.Host);
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="VisualBasicRazorViewRenderer"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public VisualBasicRazorViewRenderer(IAssemblyCatalog assemblyCatalog)
        {
            this.ModelCodeGenerator = typeof(ModelCodeGenerator);

            this.Assemblies = new List<string>();

            this.Provider = new VBCodeProvider();

            this.Host = new NancyRazorEngineHost(new VBRazorCodeLanguage(), assemblyCatalog);
        }
Exemple #17
0
 /// <summary>
 /// Initializes new instance of ClrTypeResolver class.
 /// Provided parameters are used to recognized specific symbols in particular language
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> used to resolve model types from the available assemblies.</param>
 /// <param name="identifier">Symbol type for identifier</param>
 /// <param name="keyword">Symbol type for keyword</param>
 /// <param name="dot">Symbol type for dot ('.')</param>
 /// <param name="whiteSpace">Symbol type for whitespace</param>
 /// <param name="arrayBegin">Type of symbol that begins array</param>
 /// <param name="arrayEnd">Type of symbol that ends array</param>
 protected ClrTypeResolver(IAssemblyCatalog assemblyCatalog, TSymbolType identifier, TSymbolType keyword, TSymbolType dot, TSymbolType whiteSpace, TSymbolType arrayBegin, TSymbolType arrayEnd)
 {
     this.assemblyCatalog = assemblyCatalog;
     this.identifier      = identifier;
     this.keyword         = keyword;
     this.dot             = dot;
     this.whiteSpace      = whiteSpace;
     this.arrayBegin      = arrayBegin;
     this.arrayEnd        = arrayEnd;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="VisualBasicRazorViewRenderer"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public VisualBasicRazorViewRenderer(IAssemblyCatalog assemblyCatalog)
        {
            this.ModelCodeGenerator = typeof(ModelCodeGenerator);

            this.Assemblies = new List <string>();

            this.Provider = new VBCodeProvider();

            this.Host = new NancyRazorEngineHost(new VBRazorCodeLanguage(), assemblyCatalog);
        }
Exemple #19
0
        public static IHostBuilder UseBootstrapperFactory(this IHostBuilder builder, IAssemblyCatalog assemblyCatalog,
                                                          BootstrapperOptions options, IEnumerable <ModuleMetadataValidator> validators = null)
        {
            return(builder.UseServiceProviderFactory(context =>
            {
                var moduleLoader = new ModuleLoader(validators);

                options.ConfigureBuildTimeServices.Add(collection => collection.AddSingleton(context.HostingEnvironment));
                options.ConfigureBuildTimeServices.Add(collection => collection.AddSingleton(context.Configuration));

                return BootstrapperFactory.Create(moduleLoader, assemblyCatalog, options);
            }));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyRazorEngineHost"/> class.
        /// </summary>
        /// <param name="language">The language.</param>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyRazorEngineHost(RazorCodeLanguage language, IAssemblyCatalog assemblyCatalog)
            : base(language)
        {
            this.assemblyCatalog = assemblyCatalog;
            this.DefaultBaseClass = typeof (NancyRazorViewBase).FullName;
            this.DefaultNamespace = "RazorOutput";
            this.DefaultClassName = "RazorView";

            var context = new GeneratedClassContext("Execute", "Write", "WriteLiteral", "WriteTo", "WriteLiteralTo",
                typeof (HelperResult).FullName, "DefineSection");
            context.ResolveUrlMethodName = "ResolveUrl";

            this.GeneratedClassContext = context;
        }
Exemple #21
0
        private IServiceProvider StartInternal(IAssemblyCatalog assemblyCatalog, ICollection <ModuleMetadata> modules)
        {
            var buildTimeServicesCollection = new ServiceCollection();
            var options = _options.Value;

            foreach (var action in options.ConfigureBuildTimeServices)
            {
                action(buildTimeServicesCollection);
            }

            var lifecycleListenerTypes = LoadLifecycleListeners(modules.Select(x => x.Type.Assembly).Distinct().ToArray());

            foreach (var module in modules)
            {
                buildTimeServicesCollection.AddSingleton(module.Type);
            }

            foreach (var lifecycleListenerType in lifecycleListenerTypes)
            {
                buildTimeServicesCollection.AddSingleton(_lifecycleListenerType, lifecycleListenerType);
            }

            buildTimeServicesCollection.AddSingleton(assemblyCatalog);

            var preBuildServices = buildTimeServicesCollection.BuildServiceProvider();

            using (preBuildServices)
            {
                RunRegistrations(buildTimeServicesCollection, modules, preBuildServices, ModuleLoadPhase.PreBuild);
            }

            var buildTimeServices = buildTimeServicesCollection.BuildServiceProvider();

            using (buildTimeServices)
            {
                RunRegistrations(_serviceCollection, modules, buildTimeServices, ModuleLoadPhase.Build);

                foreach (var module in modules)
                {
                    var moduleInstance = buildTimeServices.GetRequiredService(module.Type);
                    (moduleInstance as IServiceCollectionModule)?.Build(_serviceCollection);
                }
            }

            _serviceCollection.AddSingleton(assemblyCatalog);
            _serviceCollection.AddSingleton <IModuleCatalog>(provider =>
                                                             new ModuleCatalog(modules));

            return(_serviceCollection.BuildServiceProvider(validateScopes: true));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="CSharpRazorViewRenderer"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public CSharpRazorViewRenderer(IAssemblyCatalog assemblyCatalog)
        {
            this.Assemblies = new List<string>
            {
                typeof(Binder).GetAssemblyPath()
            };

            this.ModelCodeGenerator = typeof(ModelCodeGenerator);

            this.Provider = new CSharpCodeProvider();

            this.Host = new NancyRazorEngineHost(new CSharpRazorCodeLanguage(), assemblyCatalog);

            this.Host.NamespaceImports.Add("Microsoft.CSharp.RuntimeBinder");
        }
Exemple #23
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyRazorEngineHost"/> class.
        /// </summary>
        /// <param name="language">The language.</param>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyRazorEngineHost(RazorCodeLanguage language, IAssemblyCatalog assemblyCatalog)
            : base(language)
        {
            this.assemblyCatalog  = assemblyCatalog;
            this.DefaultBaseClass = typeof(NancyRazorViewBase).FullName;
            this.DefaultNamespace = "RazorOutput";
            this.DefaultClassName = "RazorView";

            var context = new GeneratedClassContext("Execute", "Write", "WriteLiteral", "WriteTo", "WriteLiteralTo",
                                                    typeof(HelperResult).FullName, "DefineSection");

            context.ResolveUrlMethodName = "ResolveUrl";

            this.GeneratedClassContext = context;
        }
Exemple #24
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CSharpRazorViewRenderer"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public CSharpRazorViewRenderer(IAssemblyCatalog assemblyCatalog)
        {
            this.Assemblies = new List <string>
            {
                typeof(Binder).GetAssemblyPath()
            };

            this.ModelCodeGenerator = typeof(ModelCodeGenerator);

            this.Provider = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();

            this.Host = new NancyRazorEngineHost(new CSharpRazorCodeLanguage(), assemblyCatalog);

            this.Host.NamespaceImports.Add("Microsoft.CSharp.RuntimeBinder");
        }
Exemple #25
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RazorViewEngine"/> class.
        /// </summary>
        /// <param name="configuration">The <see cref="IRazorConfiguration"/> that should be used by the engine.</param>
        /// <param name="environment">An <see cref="INancyEnvironment"/> instance.</param>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public RazorViewEngine(IRazorConfiguration configuration, INancyEnvironment environment, IAssemblyCatalog assemblyCatalog)
        {
            this.viewRenderers = new List<IRazorViewRenderer>
            {
                new CSharpRazorViewRenderer(assemblyCatalog),
                new VisualBasicRazorViewRenderer(assemblyCatalog)
            };

            this.razorConfiguration = configuration;
            this.traceConfiguration = environment.GetValue<TraceConfiguration>();

            foreach (var renderer in this.viewRenderers)
            {
                this.AddDefaultNameSpaces(renderer.Host);
            }
        }
Exemple #26
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RazorViewEngine"/> class.
        /// </summary>
        /// <param name="configuration">The <see cref="IRazorConfiguration"/> that should be used by the engine.</param>
        /// <param name="environment">An <see cref="INancyEnvironment"/> instance.</param>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public RazorViewEngine(IRazorConfiguration configuration, INancyEnvironment environment, IAssemblyCatalog assemblyCatalog)
        {
            this.viewRenderers = new List <IRazorViewRenderer>
            {
                new CSharpRazorViewRenderer(assemblyCatalog),
                new VisualBasicRazorViewRenderer(assemblyCatalog)
            };

            this.razorConfiguration = configuration;
            this.assemblyCatalog    = assemblyCatalog;
            this.traceConfiguration = environment.GetValue <TraceConfiguration>();

            foreach (var renderer in this.viewRenderers)
            {
                this.AddDefaultNameSpaces(renderer.Host);
            }
        }
Exemple #27
0
        public InfoModule(IRootPathProvider rootPathProvider, NancyInternalConfiguration configuration, INancyEnvironment environment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
            : base("/info")
        {
            this.typeCatalog = typeCatalog;
            this.assemblyCatalog = assemblyCatalog;

            Get("/", _ =>
            {
                return View["Info"];
            });

            Get("/data", _ =>
            {
                dynamic data = new ExpandoObject();

                data.Nancy = new ExpandoObject();
                data.Nancy.Version = string.Format("v{0}", this.GetType().GetTypeInfo().Assembly.GetName().Version.ToString());
                data.Nancy.TracesDisabled = !environment.GetValue<TraceConfiguration>().DisplayErrorTraces;
                data.Nancy.CaseSensitivity = StaticConfiguration.CaseSensitive ? "Sensitive" : "Insensitive";
                data.Nancy.RootPath = rootPathProvider.GetRootPath();
                data.Nancy.Hosting = GetHosting();
                data.Nancy.BootstrapperContainer = GetBootstrapperContainer();
                data.Nancy.LocatedBootstrapper = NancyBootstrapperLocator.Bootstrapper.GetType().ToString();
                data.Nancy.LoadedViewEngines = GetViewEngines();

                data.Configuration = new Dictionary<string, object>();
                foreach (var propertyInfo in configuration.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
                {
                    var value =
                        propertyInfo.GetValue(configuration, null);

                    data.Configuration[propertyInfo.Name] = (!typeof(IEnumerable).IsAssignableFrom(value.GetType())) ?
                        new[] { value.ToString() } :
                        ((IEnumerable<object>)value).Select(x => x.ToString());
                }

                return this.Response.AsJson((object)data);
            });
        }
Exemple #28
0
        /// <summary>
        /// Initializes a new instance of the <see cref="InfoModule"/> class, with
        /// the provided <paramref name="rootPathProvider"/>, <paramref name="configuration"/>,
        /// <paramref name="environment"/>, <paramref name="typeCatalog"/> and <paramref name="assemblyCatalog"/>.
        /// </summary>
        /// <param name="rootPathProvider">The root path provider.</param>
        /// <param name="configuration">The configuration.</param>
        /// <param name="environment">The environment.</param>
        /// <param name="typeCatalog">The type catalog.</param>
        /// <param name="assemblyCatalog">The assembly catalog.</param>
        public InfoModule(IRootPathProvider rootPathProvider, NancyInternalConfiguration configuration, INancyEnvironment environment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
            : base("/info")
        {
            this.typeCatalog     = typeCatalog;
            this.assemblyCatalog = assemblyCatalog;

            Get("/", _ =>
            {
                return(View["Info"]);
            });

            Get("/data", _ =>
            {
                dynamic data = new ExpandoObject();

                data.Nancy                       = new ExpandoObject();
                data.Nancy.Version               = string.Format("v{0}", this.GetType().GetTypeInfo().Assembly.GetName().Version.ToString());
                data.Nancy.TracesDisabled        = !environment.GetValue <TraceConfiguration>().DisplayErrorTraces;
                data.Nancy.CaseSensitivity       = StaticConfiguration.CaseSensitive ? "Sensitive" : "Insensitive";
                data.Nancy.RootPath              = rootPathProvider.GetRootPath();
                data.Nancy.Hosting               = GetHosting();
                data.Nancy.BootstrapperContainer = GetBootstrapperContainer();
                data.Nancy.LocatedBootstrapper   = NancyBootstrapperLocator.GetBootstrapperType().ToString();
                data.Nancy.LoadedViewEngines     = GetViewEngines();

                data.Configuration = new Dictionary <string, object>();
                foreach (var propertyInfo in configuration.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
                {
                    var value =
                        propertyInfo.GetValue(configuration, null);

                    data.Configuration[propertyInfo.Name] = (!typeof(IEnumerable).IsAssignableFrom(value.GetType())) ?
                                                            new[] { value.ToString() } :
                    ((IEnumerable <object>)value).Select(x => x.ToString());
                }

                return(this.Response.AsJson((object)data));
            });
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ResourceViewLocationProvider"/> class.
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 public ResourceViewLocationProvider(IAssemblyCatalog assemblyCatalog)
     : this(new DefaultResourceReader(), new ResourceAssemblyProvider(assemblyCatalog))
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RazorAssemblyProvider"/> class.
 /// </summary>
 /// <param name="configuration">An <see cref="IRazorConfiguration"/> instance.</param>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 public RazorAssemblyProvider(IRazorConfiguration configuration, IAssemblyCatalog assemblyCatalog)
 {
     this.configuration = configuration;
     this.assemblyCatalog = assemblyCatalog;
     this.assemblies = new Lazy<IReadOnlyCollection<Assembly>>(this.GetAllAssemblies);
 }
 /// <summary>
 /// Gets all <see cref="Assembly"/> instances using the <see cref="AssemblyResolveStrategies.All"/> strategy.
 /// </summary>
 /// <param name="assemblyCatalog">The <see cref="IAssemblyCatalog"/> instance that the assemblies should be reolved from.</param>
 /// <returns>An <see cref="IReadOnlyCollection{T}"/> of <see cref="Assembly"/> instances.</returns>
 public static IReadOnlyCollection <Assembly> GetAssemblies(this IAssemblyCatalog assemblyCatalog)
 {
     return(assemblyCatalog.GetAssemblies(AssemblyResolveStrategies.All));
 }
Exemple #32
0
 public ModularNancyBootstrapper(
     IEnumerable <IAssemblyCatalog> assemblyCatalogs)
 {
     _assemblyCatalog = new CompositeAssemblyCatalog(assemblyCatalogs);
 }
 private DefaultPlatform(IAssemblyCatalog assemblyCatalog)
 {
     this.AssemblyCatalog     = assemblyCatalog;
     this.TypeCatalog         = new TypeCatalog(this.AssemblyCatalog);
     this.BootstrapperLocator = new BootstrapperLocator(this.TypeCatalog);
 }
 /// <summary>
 /// Constructs a <see cref="DefaultCommandModuleResolver"/>
 /// </summary>
 /// <param name="serviceProvider"></param>
 /// <param name="assemblyCatalog"></param>
 public DefaultCommandModuleResolver(IServiceProvider serviceProvider, IAssemblyCatalog assemblyCatalog)
 {
     ServiceProvider = serviceProvider;
     AssemblyCatalog = assemblyCatalog;
 }
 public DiagnosticsModuleCatalog(IEnumerable<IDiagnosticsProvider> providers, IRootPathProvider rootPathProvider, IRequestTracing requestTracing, NancyInternalConfiguration configuration, INancyEnvironment diagnosticsEnvironment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
 {
     this.container = ConfigureContainer(providers, rootPathProvider, requestTracing, configuration, diagnosticsEnvironment, typeCatalog, assemblyCatalog);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="T:Nancy.DefaultTypeCatalog" /> class.
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="T:Nancy.IAssemblyCatalog" /> instanced, used to get the assemblies that types should be resolved from.</param>
 public InternalTypeCatalog(IAssemblyCatalog assemblyCatalog)
 {
     this.assemblyCatalog = assemblyCatalog;
     cache = new ConcurrentDictionary <Type, IReadOnlyCollection <Type> >();
 }
Exemple #37
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultTypeCatalog"/> class.
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instanced, used to get the assemblies that types should be resolved from.</param>
 public DefaultTypeCatalog(IAssemblyCatalog assemblyCatalog)
 {
     this.assemblyCatalog = assemblyCatalog;
     this.cache           = new ConcurrentDictionary <Type, IReadOnlyCollection <Type> >();
 }
        /// <summary>
        /// Enables the diagnostics dashboard and will intercept all requests that are passed to
        /// the condigured paths.
        /// </summary>
        public static void Enable(IPipelines pipelines, IEnumerable <IDiagnosticsProvider> providers, IRootPathProvider rootPathProvider, IRequestTracing requestTracing, NancyInternalConfiguration configuration, IModelBinderLocator modelBinderLocator, IEnumerable <IResponseProcessor> responseProcessors, IEnumerable <IRouteSegmentConstraint> routeSegmentConstraints, ICultureService cultureService, IRequestTraceFactory requestTraceFactory, IEnumerable <IRouteMetadataProvider> routeMetadataProviders, ITextResource textResource, INancyEnvironment environment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
        {
            var diagnosticsConfiguration =
                environment.GetValue <DiagnosticsConfiguration>();

            var diagnosticsEnvironment =
                GetDiagnosticsEnvironment();

            var diagnosticsModuleCatalog = new DiagnosticsModuleCatalog(providers, rootPathProvider, requestTracing, configuration, diagnosticsEnvironment, typeCatalog, assemblyCatalog);

            var diagnosticsRouteCache = new RouteCache(
                diagnosticsModuleCatalog,
                new DefaultNancyContextFactory(cultureService, requestTraceFactory, textResource, environment),
                new DefaultRouteSegmentExtractor(),
                new DefaultRouteDescriptionProvider(),
                cultureService,
                routeMetadataProviders);

            var diagnosticsRouteResolver = new DefaultRouteResolver(
                diagnosticsModuleCatalog,
                new DiagnosticsModuleBuilder(rootPathProvider, modelBinderLocator, diagnosticsEnvironment, environment),
                diagnosticsRouteCache,
                new RouteResolverTrie(new TrieNodeFactory(routeSegmentConstraints)),
                environment);

            var serializer = new DefaultObjectSerializer();

            pipelines.BeforeRequest.AddItemToStartOfPipeline(
                new PipelineItem <Func <NancyContext, Response> >(
                    PipelineKey,
                    ctx =>
            {
                if (!ctx.ControlPanelEnabled)
                {
                    return(null);
                }

                if (!ctx.Request.Path.StartsWith(diagnosticsConfiguration.Path, StringComparison.OrdinalIgnoreCase))
                {
                    return(null);
                }

                if (!diagnosticsConfiguration.Enabled)
                {
                    return(HttpStatusCode.NotFound);
                }

                ctx.Items[ItemsKey] = true;

                var resourcePrefix =
                    string.Concat(diagnosticsConfiguration.Path, "/Resources/");

                if (ctx.Request.Path.StartsWith(resourcePrefix, StringComparison.OrdinalIgnoreCase))
                {
                    var resourceNamespace = "Nancy.Diagnostics.Resources";

                    var path = Path.GetDirectoryName(ctx.Request.Url.Path.Replace(resourcePrefix, string.Empty)) ?? string.Empty;
                    if (!string.IsNullOrEmpty(path))
                    {
                        resourceNamespace += string.Format(".{0}", path.Replace(Path.DirectorySeparatorChar, '.'));
                    }

                    return(new EmbeddedFileResponse(
                               typeof(DiagnosticsHook).GetTypeInfo().Assembly,
                               resourceNamespace,
                               Path.GetFileName(ctx.Request.Url.Path)));
                }

                RewriteDiagnosticsUrl(diagnosticsConfiguration, ctx);

                return(ValidateConfiguration(diagnosticsConfiguration)
                                   ? ExecuteDiagnostics(ctx, diagnosticsRouteResolver, diagnosticsConfiguration, serializer, diagnosticsEnvironment)
                                   : new DiagnosticsViewRenderer(ctx, environment)["help"]);
            }));
        }
Exemple #39
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyCSharpRazorBuildProvider"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyCSharpRazorBuildProvider(IAssemblyCatalog assemblyCatalog)
        {
            this.compilerType = this.GetDefaultCompilerTypeForLanguage("C#");

            this.host = new NancyRazorEngineHost(new CSharpRazorCodeLanguage(), assemblyCatalog);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="RazorAssemblyProvider"/> class.
 /// </summary>
 /// <param name="configuration">An <see cref="IRazorConfiguration"/> instance.</param>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 public RazorAssemblyProvider(IRazorConfiguration configuration, IAssemblyCatalog assemblyCatalog)
 {
     this.configuration   = configuration;
     this.assemblyCatalog = assemblyCatalog;
     this.assemblies      = new Lazy <IReadOnlyCollection <Assembly> >(this.GetAllAssemblies);
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyCSharpRazorBuildProvider"/> class.
        /// </summary>
        /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
        public NancyCSharpRazorBuildProvider(IAssemblyCatalog assemblyCatalog)
        {
            this.compilerType = this.GetDefaultCompilerTypeForLanguage("C#");

            this.host = new NancyRazorEngineHost(new CSharpRazorCodeLanguage(), assemblyCatalog);
        }
 public CustomResourceAssemblyProvider(IAssemblyCatalog assemblyCatalog)
 {
     this.assemblyCatalog = assemblyCatalog;
 }
 /// <summary>
 /// Constructs a <see cref="DefaultCommandModuleResolver"/>
 /// </summary>
 /// <param name="serviceProvider"></param>
 /// <param name="assemblyCatalog"></param>
 public DefaultCommandModuleResolver(IServiceProvider serviceProvider, IAssemblyCatalog assemblyCatalog)
 {
     ServiceProvider = serviceProvider;
     AssemblyCatalog = assemblyCatalog;
 }
 public DiagnosticsModuleCatalog(IEnumerable <IDiagnosticsProvider> providers, IRootPathProvider rootPathProvider, IRequestTracing requestTracing, NancyInternalConfiguration configuration, INancyEnvironment diagnosticsEnvironment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
 {
     this.container = ConfigureContainer(providers, rootPathProvider, requestTracing, configuration, diagnosticsEnvironment, typeCatalog, assemblyCatalog);
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="NancyCSharpRazorBuildProvider"/> class.
        /// </summary>
        /// <param name="assemblyCatalog"></param>
        public NancyVisualBasicRazorBuildProvider(IAssemblyCatalog assemblyCatalog)
        {
            this.compilerType = this.GetDefaultCompilerTypeForLanguage("VB");

            this.host = new NancyRazorEngineHost(new VBRazorCodeLanguage(), assemblyCatalog);
        }
        private static TinyIoCContainer ConfigureContainer(IEnumerable <IDiagnosticsProvider> providers, IRootPathProvider rootPathProvider, IRequestTracing requestTracing, NancyInternalConfiguration configuration, INancyEnvironment diagnosticsEnvironment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
        {
            var diagContainer = new TinyIoCContainer();

            diagContainer.Register <IInteractiveDiagnostics, InteractiveDiagnostics>();
            diagContainer.Register <IRequestTracing>(requestTracing);
            diagContainer.Register <IRootPathProvider>(rootPathProvider);
            diagContainer.Register <NancyInternalConfiguration>(configuration);
            diagContainer.Register <IModelBinderLocator, DefaultModelBinderLocator>();
            diagContainer.Register <IBinder, DefaultBinder>();
            diagContainer.Register <IFieldNameConverter, DefaultFieldNameConverter>();
            diagContainer.Register <BindingDefaults, BindingDefaults>();
            diagContainer.Register <INancyEnvironment>(diagnosticsEnvironment);
            diagContainer.Register <ISerializer>(new DefaultJsonSerializer(diagnosticsEnvironment));
            diagContainer.Register <ITypeCatalog>(typeCatalog);
            diagContainer.Register <IAssemblyCatalog>(assemblyCatalog);


            foreach (var diagnosticsProvider in providers)
            {
                var key = string.Concat(
                    diagnosticsProvider.GetType().FullName,
                    "_",
                    diagnosticsProvider.DiagnosticObject.GetType().FullName);

                diagContainer.Register <IDiagnosticsProvider>(diagnosticsProvider, key);
            }

            foreach (var moduleType in typeCatalog.GetTypesAssignableTo <DiagnosticModule>())
            {
                diagContainer.Register(typeof(INancyModule), moduleType, moduleType.FullName).AsMultiInstance();
            }

            return(diagContainer);
        }
 public CustomResourceAssemblyProvider(IAssemblyCatalog assemblyCatalog)
 {
     this.assemblyCatalog = assemblyCatalog;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ResourceViewLocationProvider"/> class.
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instance.</param>
 public ResourceViewLocationProvider(IAssemblyCatalog assemblyCatalog)
     : this(new DefaultResourceReader(), new ResourceAssemblyProvider(assemblyCatalog))
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultTypeCatalog"/> class.
 /// </summary>
 /// <param name="assemblyCatalog">An <see cref="IAssemblyCatalog"/> instanced, used to get the assemblies that types should be resolved from.</param>
 public DefaultTypeCatalog(IAssemblyCatalog assemblyCatalog)
 {
     this.assemblyCatalog = assemblyCatalog;
     this.cache = new ConcurrentDictionary<Type, IReadOnlyCollection<Type>>();
 }
Exemple #50
0
        /// <summary>
        /// Enables the diagnostics dashboard and will intercept all requests that are passed to
        /// the condigured paths.
        /// </summary>
        public static void Enable(IPipelines pipelines, IEnumerable<IDiagnosticsProvider> providers, IRootPathProvider rootPathProvider, IRequestTracing requestTracing, NancyInternalConfiguration configuration, IModelBinderLocator modelBinderLocator, IEnumerable<IResponseProcessor> responseProcessors, IEnumerable<IRouteSegmentConstraint> routeSegmentConstraints, ICultureService cultureService, IRequestTraceFactory requestTraceFactory, IEnumerable<IRouteMetadataProvider> routeMetadataProviders, ITextResource textResource, INancyEnvironment environment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
        {
            var diagnosticsConfiguration =
                environment.GetValue<DiagnosticsConfiguration>();

            var diagnosticsEnvironment =
                GetDiagnosticsEnvironment();

            var diagnosticsModuleCatalog = new DiagnosticsModuleCatalog(providers, rootPathProvider, requestTracing, configuration, diagnosticsEnvironment, typeCatalog, assemblyCatalog);

            var diagnosticsRouteCache = new RouteCache(
                diagnosticsModuleCatalog,
                new DefaultNancyContextFactory(cultureService, requestTraceFactory, textResource, environment),
                new DefaultRouteSegmentExtractor(),
                new DefaultRouteDescriptionProvider(),
                cultureService,
                routeMetadataProviders);

            var diagnosticsRouteResolver = new DefaultRouteResolver(
                diagnosticsModuleCatalog,
                new DiagnosticsModuleBuilder(rootPathProvider, modelBinderLocator, diagnosticsEnvironment, environment),
                diagnosticsRouteCache,
                new RouteResolverTrie(new TrieNodeFactory(routeSegmentConstraints)),
                environment);

            var serializer = new DefaultObjectSerializer();

            pipelines.BeforeRequest.AddItemToStartOfPipeline(
                new PipelineItem<Func<NancyContext, Response>>(
                    PipelineKey,
                    ctx =>
                    {
                        if (!ctx.ControlPanelEnabled)
                        {
                            return null;
                        }

                        if (!ctx.Request.Path.StartsWith(diagnosticsConfiguration.Path, StringComparison.OrdinalIgnoreCase))
                        {
                            return null;
                        }

                        if (!diagnosticsConfiguration.Enabled)
                        {
                            return HttpStatusCode.NotFound;
                        }

                        ctx.Items[ItemsKey] = true;

                        var resourcePrefix =
                            string.Concat(diagnosticsConfiguration.Path, "/Resources/");

                        if (ctx.Request.Path.StartsWith(resourcePrefix, StringComparison.OrdinalIgnoreCase))
                        {
                            var resourceNamespace = "Nancy.Diagnostics.Resources";

                            var path = Path.GetDirectoryName(ctx.Request.Url.Path.Replace(resourcePrefix, string.Empty)) ?? string.Empty;
                            if (!string.IsNullOrEmpty(path))
                            {
                                resourceNamespace += string.Format(".{0}", path.Replace(Path.DirectorySeparatorChar, '.'));
                            }

                            return new EmbeddedFileResponse(
                                typeof(DiagnosticsHook).GetTypeInfo().Assembly,
                                resourceNamespace,
                                Path.GetFileName(ctx.Request.Url.Path));
                        }

                        RewriteDiagnosticsUrl(diagnosticsConfiguration, ctx);

                        return ValidateConfiguration(diagnosticsConfiguration)
                                   ? ExecuteDiagnostics(ctx, diagnosticsRouteResolver, diagnosticsConfiguration, serializer, diagnosticsEnvironment)
                                   : new DiagnosticsViewRenderer(ctx, environment)["help"];
                    }));
        }