public static void SetUp(Container container) { bool securityTrimmingEnabled = false; bool enableLocalization = true; string absoluteFileName = HostingEnvironment.MapPath("~/Mvc.sitemap"); TimeSpan absoluteCacheExpiration = TimeSpan.FromMinutes(5); string[] includeAssembliesForScan = new string[] { "$AssemblyName$" }; // Extension to allow resolution of arrays by GetAllInstances (natively based on IEnumerable). // source from: https://simpleinjector.codeplex.com/wikipage?title=CollectionRegistrationExtensions AllowToResolveArraysAndLists(container); var currentAssembly = typeof(MvcSiteMapProviderContainerInitializer).Assembly; var siteMapProviderAssembly = typeof(SiteMaps).Assembly; var allAssemblies = new Assembly[] { currentAssembly, siteMapProviderAssembly }; var excludeTypes = new Type[] { typeof (SiteMapNodeVisibilityProviderStrategy), typeof (SiteMapXmlReservedAttributeNameProvider), typeof (SiteMapBuilderSetStrategy), typeof (ControllerTypeResolverFactory), // Added 2013-06-28 by eric-b to avoid default singleton registration: typeof(XmlSiteMapController), // Added 2013-06-28 by eric-b for SimpleInjector.Verify method: typeof(PreservedRouteParameterCollection), typeof(MvcResolver), typeof(MvcSiteMapProvider.SiteMap), typeof(MetaRobotsValueCollection), typeof(RoleCollection), typeof(SiteMapPluginProvider), typeof(ControllerTypeResolver), typeof(RouteValueDictionary), typeof(AttributeDictionary) }; var multipleImplementationTypes = new Type[] { typeof (ISiteMapNodeUrlResolver), typeof (ISiteMapNodeVisibilityProvider), typeof (IDynamicNodeProvider) }; // Single implementations of interface with matching name (minus the "I"). CommonConventions.RegisterDefaultConventions( (interfaceType, implementationType) => container.RegisterSingle(interfaceType, implementationType), new Assembly[] { siteMapProviderAssembly }, allAssemblies, excludeTypes, string.Empty); // Multiple implementations of strategy based extension points CommonConventions.RegisterAllImplementationsOfInterfaceSingle( (interfaceType, implementationTypes) => container.RegisterAll(interfaceType, implementationTypes), multipleImplementationTypes, allAssemblies, new Type[0], "^Composite"); container.Register<XmlSiteMapController>(); // Visibility Providers container.RegisterSingle<ISiteMapNodeVisibilityProviderStrategy>(() => new SiteMapNodeVisibilityProviderStrategy( container.GetAllInstances <ISiteMapNodeVisibilityProvider>(). ToArray(), string.Empty)); // Pass in the global controllerBuilder reference container.RegisterSingle<ControllerBuilder>(() => ControllerBuilder.Current); container.RegisterSingle<IControllerBuilder, ControllerBuilderAdaptor>(); container.RegisterSingle<IBuildManager, BuildManagerAdaptor>(); container.RegisterSingle<IControllerTypeResolverFactory>(() => new ControllerTypeResolverFactory(new string[0], container.GetInstance <IControllerBuilder >(), container.GetInstance <IBuildManager>())); // Configure Security container.RegisterSingle<AuthorizeAttributeAclModule>(() => new AuthorizeAttributeAclModule( container.GetInstance<IMvcContextFactory>(), container.GetInstance<IObjectCopier>(), container.GetInstance<IControllerDescriptorFactory>(), container.GetInstance<IControllerBuilder>(), container.GetInstance<IAuthorizeAttributeBuilder>(), container.GetInstance<IGlobalFilterProvider>())); container.RegisterAll<IAclModule>(typeof(AuthorizeAttributeAclModule), typeof(XmlRolesAclModule)); container.RegisterSingle<IAclModule>(() => new CompositeAclModule(container.GetAllInstances<IAclModule>().ToArray())); // Setup cache #if NET35 container.RegisterSingleOpenGeneric(typeof(ICacheProvider<>), typeof(AspNetCacheProvider<>)); container.RegisterSingle<ICacheDependency>(() => new AspNetFileCacheDependency(absoluteFileName)); #else container.RegisterSingle<System.Runtime.Caching.ObjectCache>(() => System.Runtime.Caching.MemoryCache.Default); container.RegisterSingleOpenGeneric(typeof(ICacheProvider<>), typeof(RuntimeCacheProvider<>)); container.RegisterSingle<ICacheDependency>(() => new RuntimeFileCacheDependency(absoluteFileName)); #endif container.RegisterSingle<ICacheDetails>(() => new CacheDetails(absoluteCacheExpiration, TimeSpan.MinValue, container.GetInstance<ICacheDependency>())); // Configure the visitors container.RegisterSingle<ISiteMapNodeVisitor, UrlResolvingSiteMapNodeVisitor>(); // Register the sitemap builder container.RegisterSingle<ISiteMapXmlReservedAttributeNameProvider>( () => new SiteMapXmlReservedAttributeNameProvider(new string[0])); container.RegisterSingle<IXmlSource>(() => new FileXmlSource(absoluteFileName)); container.RegisterSingle<XmlSiteMapBuilder>(() => new XmlSiteMapBuilder( container.GetInstance<IXmlSource>(), container.GetInstance<ISiteMapXmlReservedAttributeNameProvider>(), container.GetInstance<INodeKeyGenerator>(), container.GetInstance<IDynamicNodeBuilder>(), container.GetInstance<ISiteMapNodeFactory>(), container.GetInstance<ISiteMapXmlNameProvider>() )); container.RegisterSingle<ReflectionSiteMapBuilder>(() => new ReflectionSiteMapBuilder( includeAssembliesForScan, new string[0], container.GetInstance <ISiteMapXmlReservedAttributeNameProvider>(), container.GetInstance<INodeKeyGenerator>(), container.GetInstance<IDynamicNodeBuilder>(), container.GetInstance<ISiteMapNodeFactory>(), container.GetInstance<ISiteMapCacheKeyGenerator>() )); container.RegisterAll<ISiteMapBuilderSet>(ResolveISiteMapBuilderSets(container, securityTrimmingEnabled, enableLocalization)); container.RegisterSingle<ISiteMapBuilderSetStrategy>(() => new SiteMapBuilderSetStrategy(container.GetAllInstances<ISiteMapBuilderSet>().ToArray())); container.RegisterSingle<VisitingSiteMapBuilder>(); }
public RegisterSingleOpenGenericNonGeneric() { var container = new Container(); container.RegisterSingleOpenGeneric(typeof(IRepository<>), typeof(Repository<,>)); }
public static void SetUp(Container container) { bool enableLocalization = true; string absoluteFileName = HostingEnvironment.MapPath("~/Mvc.sitemap"); TimeSpan absoluteCacheExpiration = TimeSpan.FromMinutes(5); bool visibilityAffectsDescendants = true; bool useTitleIfDescriptionNotProvided = true; #if Demo // Settings for MvcMusicStore demo: don't copy into your project bool securityTrimmingEnabled = true; string[] includeAssembliesForScan = new string[] { "Mvc Music Store" }; #else bool securityTrimmingEnabled = false; string[] includeAssembliesForScan = new string[] { "$AssemblyName$" }; #endif // Extension to allow resolution of arrays by GetAllInstances (natively based on IEnumerable). // source from: https://simpleinjector.codeplex.com/wikipage?title=CollectionRegistrationExtensions AllowToResolveArraysAndLists(container); var currentAssembly = typeof(MvcSiteMapProviderContainerInitializer).Assembly; var siteMapProviderAssembly = typeof(SiteMaps).Assembly; var allAssemblies = new Assembly[] { currentAssembly, siteMapProviderAssembly }; var excludeTypes = new Type[] { // Use this array to add types you wish to explicitly exclude from convention-based // auto-registration. By default all types that either match I[TypeName] = [TypeName] or // I[TypeName] = [TypeName]Adapter will be automatically wired up as long as they don't // have the [ExcludeFromAutoRegistrationAttribute]. // // If you want to override a type that follows the convention, you should add the name // of either the implementation name or the interface that it inherits to this list and // add your manual registration code below. This will prevent duplicate registrations // of the types from occurring. // Example: // typeof(SiteMap), // typeof(SiteMapNodeVisibilityProviderStrategy) }; var multipleImplementationTypes = new Type[] { typeof(ISiteMapNodeUrlResolver), typeof(ISiteMapNodeVisibilityProvider), typeof(IDynamicNodeProvider) }; // Matching type name (I[TypeName] = [TypeName]) or matching type name + suffix Adapter (I[TypeName] = [TypeName]Adapter) // and not decorated with the [ExcludeFromAutoRegistrationAttribute]. CommonConventions.RegisterDefaultConventions( (interfaceType, implementationType) => container.RegisterSingle(interfaceType, implementationType), new Assembly[] { siteMapProviderAssembly }, allAssemblies, excludeTypes, string.Empty); // Multiple implementations of strategy based extension points (and not decorated with [ExcludeFromAutoRegistrationAttribute]). CommonConventions.RegisterAllImplementationsOfInterfaceSingle( (interfaceType, implementationTypes) => container.RegisterAll(interfaceType, implementationTypes), multipleImplementationTypes, allAssemblies, excludeTypes, string.Empty); container.Register<XmlSiteMapController>(); // Visibility Providers container.RegisterSingle<ISiteMapNodeVisibilityProviderStrategy>(() => new SiteMapNodeVisibilityProviderStrategy( container.GetAllInstances<ISiteMapNodeVisibilityProvider>().ToArray(), string.Empty)); // Pass in the global controllerBuilder reference container.RegisterSingle<ControllerBuilder>(() => ControllerBuilder.Current); container.RegisterSingle<IControllerTypeResolverFactory>(() => new ControllerTypeResolverFactory( new string[0], container.GetInstance<IControllerBuilder>(), container.GetInstance<IBuildManager>())); // Configure Security container.RegisterAll<IAclModule>(typeof(AuthorizeAttributeAclModule), typeof(XmlRolesAclModule)); container.RegisterSingle<IAclModule>(() => new CompositeAclModule(container.GetAllInstances<IAclModule>().ToArray())); // Setup cache #if NET35 container.RegisterSingleOpenGeneric(typeof(ICacheProvider<>), typeof(AspNetCacheProvider<>)); container.RegisterSingle<ICacheDependency>(() => new AspNetFileCacheDependency(absoluteFileName)); #else container.RegisterSingle<System.Runtime.Caching.ObjectCache>(() => System.Runtime.Caching.MemoryCache.Default); container.RegisterSingleOpenGeneric(typeof(ICacheProvider<>), typeof(RuntimeCacheProvider<>)); container.RegisterSingle<ICacheDependency>(() => new RuntimeFileCacheDependency(absoluteFileName)); #endif container.RegisterSingle<ICacheDetails>(() => new CacheDetails(absoluteCacheExpiration, TimeSpan.MinValue, container.GetInstance<ICacheDependency>())); // Configure the visitors container.RegisterSingle<ISiteMapNodeVisitor, UrlResolvingSiteMapNodeVisitor>(); // Prepare for the sitemap node providers container.RegisterSingle<IReservedAttributeNameProvider>(() => new ReservedAttributeNameProvider(new string[0])); container.RegisterSingle<IXmlSource>(() => new FileXmlSource(absoluteFileName)); // Register the sitemap node providers container.RegisterSingle<XmlSiteMapNodeProvider>(() => container.GetInstance<XmlSiteMapNodeProviderFactory>() .Create(container.GetInstance<IXmlSource>())); container.RegisterSingle<ReflectionSiteMapNodeProvider>(() => container.GetInstance<ReflectionSiteMapNodeProviderFactory>() .Create(includeAssembliesForScan)); // Register the sitemap builders container.RegisterSingle<ISiteMapBuilder>(() => container.GetInstance<SiteMapBuilderFactory>() .Create(new CompositeSiteMapNodeProvider(container.GetInstance<XmlSiteMapNodeProvider>(), container.GetInstance<ReflectionSiteMapNodeProvider>()))); container.RegisterAll<ISiteMapBuilderSet>( ResolveISiteMapBuilderSets(container, securityTrimmingEnabled, enableLocalization, visibilityAffectsDescendants, useTitleIfDescriptionNotProvided)); container.RegisterSingle<ISiteMapBuilderSetStrategy>(() => new SiteMapBuilderSetStrategy(container.GetAllInstances<ISiteMapBuilderSet>().ToArray())); }
internal static Container Bootstrap(ContainerConfiguration configuration) { var container = new Container(); /** * Entity Framework Dependency Injection: * * There are 2 main dependencies: database initialization, and database seeding. * Whenever the domain entity model changes, the SQL db will be out of sync. * The DropOnModelChangeInitializer only drops and recreates the database when the entity model changes. * The DropAlwaysInitializer drops and recreates the database after each new solution rebuild. * The BrownfieldInitializer never drops the database, even if the entity model does not match. * However the initializer only drops and recreates the database, all tables will be empty. * To populate with new data, use the CompositeDbSeeder. * It uses a combination of DbContext and raw SQL to populate the database. * When the BrownfieldDbSeeder is injected, no data will be seeded. * * 2012.02.22: There is now a DevelopmentDataSqlSeeder, which is much faster than the CompositeDbSeeder. * * When checking in this file, the DropOnModelChangeInitializer and DevelopmentDataSqlSeeder * should be active. All other seeders and initializers should be commented out. */ if (configuration.IsDeployedToCloud) { container.Register<IDatabaseInitializer<UCosmicContext>, BrownfieldInitializer>(); //container.Register<ISeedData, BrownfieldSeeder>(); } else { container.Register<IDatabaseInitializer<UCosmicContext>, DropOnModelChangeInitializer>(); //container.Register<IDatabaseInitializer<UCosmicContext>, DropAlwaysInitializer>(); //container.Register<IDatabaseInitializer<UCosmicContext>, BrownfieldInitializer>(); container.Register<ISeedData, CompositeSqlSeeder>(); //container.Register<ISeedData, CompositeEntitySeeder>(); //container.Register<ISeedData, BrownfieldSeeder>(); } // register 1 DbContext for all implemented interfaces container.RegisterPerWebRequest<UCosmicContext>(); container.Register<IUnitOfWork>(container.GetInstance<UCosmicContext>); container.Register<IQueryEntities>(container.GetInstance<UCosmicContext>); container.Register<ICommandEntities>(container.GetInstance<UCosmicContext>); container.RegisterInitializer<UCosmicContext>(container.InjectProperties); // other interfaces related to DbContext //container.Register<ICommandObjects, ObjectCommander>(); // general purpose interfaces container.Register<IStorePasswords, DotNetMembershipProvider>(); container.Register<ISignUsers, DotNetFormsAuthentication>(); container.Register<IManageConfigurations, DotNetConfigurationManager>(); container.Register<ILogExceptions, ElmahExceptionLogger>(); container.Register<IConsumeHttp, WebRequestHttpConsumer>(); container.Register<ISendMail, SmtpMailSender>(); // SAML interfaces container.Register<IProvideSaml2Service, ComponentSpaceSaml2ServiceProvider>(); container.Register<IParseSaml2Metadata, ComponentSpaceSaml2MetadataParser>(); container.Register<IStoreSamlCertificates, RealSamlCertificateStorage>(); // NGeo interfaces container.RegisterPerWebRequest<IConsumeGeoNames, GeoNamesClient>(); container.RegisterPerWebRequest<IContainGeoNames>(() => new GeoNamesContainer(configuration.GeoNamesUserName)); container.RegisterPerWebRequest<IConsumeGeoPlanet, GeoPlanetClient>(); container.RegisterPerWebRequest<IContainGeoPlanet>(() => new GeoPlanetContainer(configuration.GeoPlanetAppId)); container.RegisterPerWebRequest<IConsumePlaceFinder, PlaceFinderClient>(); // load assemblies for IoC reflection var assemblies = AppDomain.CurrentDomain.GetAssemblies() .Where(a => !a.FullName.StartsWith("Microsoft.Web.Mvc,")) .ToArray(); // fluent validation open generics container.RegisterManyForOpenGeneric(typeof(IValidator<>), assemblies); // add unregistered type resolution for objects missing an IValidator<T> container.RegisterSingleOpenGeneric(typeof(IValidator<>), typeof(UnspecifiedValidator<>)); // open generic decorator chains http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91 container.RegisterManyForOpenGeneric(typeof(IHandleCommands<>), assemblies); // send emails in a new thread container.RegisterRunAsyncCommandHandlerProxy<SendEmailMessageCommand>(); // register fluent validators on commands container.RegisterDecorator(typeof(IHandleCommands<>), typeof(FluentValidationCommandDecorator<>)); //container.RegisterOpenGenericDecorator(typeof(IHandleCommands<>), // typeof(FluentValidationCommandDecorator<>)); // query processing container.RegisterSingle<SimpleQueryProcessor>(); container.Register<IProcessQueries>(container.GetInstance<SimpleQueryProcessor>); container.RegisterManyForOpenGeneric(typeof(IHandleQueries<,>), assemblies); // verify container container.Verify(); return container; }