/// <summary> /// Loads the object definitions from fluent configurations, build the object definition and load it into the spring object registry. /// </summary> /// <param name="listableObjectFactory">The listable object factory.</param> public void LoadObjectDefinitions(IConfigurableListableObjectFactory listableObjectFactory) { var definitionService = new ObjectDefinitionService(_objectDefinitionFactory, listableObjectFactory); foreach (IRegistrableObject registrableObject in _springObjectConfigurations .OfType <IRegistrableObject>() .Select(configurationContainer => (configurationContainer))) { InitialiseConventions(registrableObject); IObjectDefinition objectDefinition = registrableObject.GetObjectDefinition(definitionService); listableObjectFactory.RegisterObjectDefinition(registrableObject.Identifier, objectDefinition); if (FluentStaticConfiguration.RegisterImplementedInterfaces) { foreach (Type @interface in objectDefinition.ObjectType.GetInterfaces()) { if (!listableObjectFactory.ContainsObjectDefinition(@interface.FullName)) { listableObjectFactory.RegisterObjectDefinition(@interface.FullName, objectDefinition); } } } } }
private static void RegisterPrototype <TImplementation>(IConfigurableListableObjectFactory confObjFactory) { ObjectDefinitionBuilder odb = ObjectDefinitionBuilder.RootObjectDefinition(objectDefinitionFactory, typeof(TImplementation)) .SetSingleton(false).SetAutowireMode(AutoWiringMode.AutoDetect); confObjFactory.RegisterObjectDefinition(typeof(TImplementation).FullName, odb.ObjectDefinition); }
private static void Register <TSerivice, TImplementation>(IConfigurableListableObjectFactory confObjFactory) { ObjectDefinitionBuilder odb = ObjectDefinitionBuilder.RootObjectDefinition(objectDefinitionFactory, typeof(TImplementation)). SetAutowireMode(AutoWiringMode.Constructor); confObjFactory.RegisterObjectDefinition(typeof(TSerivice).FullName, odb.ObjectDefinition); }
public static void RegisterDefaultConversationAop(this IConfigurableListableObjectFactory confObjFactory) { var metaInfoStore = new ReflectionConversationalMetaInfoSource(); confObjFactory.RegisterInstance(metaInfoStore); // register advisor definition var pc = ObjectDefinitionBuilder.RootObjectDefinition(ObjectDefinitionFactory, typeof(ConversationInterceptor)) .SetAutowireMode(AutoWiringMode.AutoDetect) .SetSingleton(false); confObjFactory.RegisterObjectDefinition("PersistentConversationalInterceptor", pc.ObjectDefinition); var postProcessor = new ConversationalAttributeAutoProxyCreator(metaInfoStore) { ObjectFactory = confObjFactory, InterceptorNames = new[] { "PersistentConversationalInterceptor" } }; confObjFactory.AddObjectPostProcessor(postProcessor); }
// process PerRequest, Singleton and AutowiredAttribute attributes public void PostProcessObjectFactory(IConfigurableListableObjectFactory factory) { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { // register all singleton and per request attribute //(from type in assembly.GetTypes() // let attributes = type.GetCustomAttributes(typeof(SingletonAttribute), false) // where attributes != null && attributes.Length > 0 // select new { CreateType = type, Attribute = attributes.Cast<SingletonAttribute>().First() }) // .ToList() // .ForEach(x => // { // string name = x.CreateType.Name; // if (x.Attribute.Type != null) name = x.Attribute.Type.Name; // if (x.Attribute.Name != null) name = x.Attribute.Name; // object singletonObj = factory.Autowire(x.CreateType, AutoWiringMode.No, false); // factory.RegisterSingleton(name, singletonObj); // }); //// register all perrequest attribute //(from type in assembly.GetTypes() // let attributes = type.GetCustomAttributes(typeof(PerRequestAttribute), false) // where attributes != null && attributes.Length > 0 // select new { CreateType = type, Attribute = attributes.Cast<PerRequestAttribute>().First() }) // .ToList() // .ForEach(x => // { // var defaultFactory = new DefaultObjectDefinitionFactory(); // AbstractObjectDefinition def = defaultFactory.CreateObjectDefinition(x.CreateType.FullName + "," + x.CreateType.Assembly.GetName(), null, AppDomain.CurrentDomain); // string name = x.CreateType.Name; // if (x.Attribute.Type != null) name = x.Attribute.Type.Name; // if (x.Attribute.Name != null) name = x.Attribute.Name; // factory.RegisterObjectDefinition(name, def); // }); // register all perrequest and singleton attribute (from type in assembly.GetTypes() let attributes = type.GetCustomAttributes(false) from attribute in attributes where attributes != null && attributes.Length > 0 && (attribute is PerRequestAttribute || attribute is SingletonAttribute) select new { CreateType = type, Attribute = attribute }) .ToList() .ForEach(x => { dynamic objX = x; var defaultFactory = new DefaultObjectDefinitionFactory(); AbstractObjectDefinition def = defaultFactory.CreateObjectDefinition(x.CreateType.FullName + "," + x.CreateType.Assembly.GetName(), null, AppDomain.CurrentDomain); string name = objX.CreateType.Name; if (objX.Attribute.Type != null) name = objX.Attribute.Type.Name; if (objX.Attribute.Name != null) name = objX.Attribute.Name; if(objX.Attribute is SingletonAttribute) { def.IsSingleton = true; } ConstructorArgumentValues cav = def.ConstructorArgumentValues; object[] constructValues = objX.Attribute.ConstructorArgs; if(constructValues!=null && constructValues.Length>0) { for(int i=0;i<constructValues.Length;i++) { cav.AddIndexedArgumentValue(i,constructValues[i]); } } factory.RegisterObjectDefinition(name, def); }); } }