public void validate_wireup_of_generic_attributes_to_strongly_typed_metadata_on_resolve()
        {
            // arrange
            var builder = new ContainerBuilder();
            builder.RegisterMetadataRegistrationSources();

            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                .As<IWeakTypedScenario>()
                .WithAttributedMetadata();

            // act
            var items = builder.Build().Resolve<IEnumerable<Lazy<IWeakTypedScenario, IWeakTypedScenarioMetadata>>>();

            // assert
            Assert.That(items.Count(), Is.EqualTo(1));
            Assert.That(items.Where(p => p.Metadata.Name == "Hello").Count(), Is.EqualTo(1));
        }
        protected override void Load(ContainerBuilder builder)
        {
            // Enables the use of Interface based metadata
            builder.RegisterMetadataRegistrationSources();

            // Enables the use of metadata attributes 
            builder.RegisterModule<AttributedMetadataModule>();

            var currentAssembly = System.Reflection.Assembly.GetExecutingAssembly();

            #region Register IRuleSpecs
            
            currentAssembly.GetTypes()
                           .Where(t => t.GetInterfaces().Contains(typeof(IRuleSpec)) && !t.IsAbstract)
                           .ForEach(specType => {

                               builder.RegisterType(specType).As<IRuleSpec>()
                                      .WithAttributeFilter();
                                        
                           });
            #endregion

            #region Register IRuleHandlers
            
            currentAssembly.GetTypes()
                           .Where(t => t.GetInterfaces().Contains(typeof(IRuleHandler)) && !t.IsAbstract)
                           .ForEach(handlerType => {

                               builder.RegisterType(handlerType).As<IRuleHandler>()
                                      .WithAttributeFilter();
                           });

            #endregion 

            builder.RegisterType<RulesEngine>().As<IRulesEngine>();
        }
 protected override void Load(ContainerBuilder builder)
 {
     builder.RegisterMetadataRegistrationSources();
     builder.RegisterType<WeakTypedScenario>().As<IWeakTypedScenario>();
     builder.RegisterType<CombinationalWeakTypedScenario>().As<ICombinationalWeakTypedScenario>();
 }