Spring.AutoRegistration is Fluent registration for Spring .NET, that I ported, inspired by the Unity AutoRegistration.Here are some examples:Scans all assemblies that the starts with Spring.AutoRegistration.Test:var context = new GenericApplicationContext(); context.Configure() .IncludeAssembly(x => x.FullName.StartsWith("Spring.AutoRegistration.Test")) .Include(x => x.ImplementsITypeName(), Then.Register()) .ApplyAutoRegistration();Registers instances as singleton. You may also use the UsingPrototype method.var context = new GenericApplicationContext(); context.Configure() .IncludeAssembly(x => x.FullName.StartsWith("Spring.AutoRegistration.Test")) .Include(x => x.ImplementsITypeName(), Then.Register().UsingSingleton()) .ApplyAutoRegistration();Injects properties using InjectAttribute:var context = new GenericApplicationContext(); context.Configure() .IncludeAssembly(x => x.FullName.StartsWith("Spring.AutoRegistration.Test")) .Include(x => x.ImplementsITypeName(), Then.Register().UsingSingleton() .InjectByProperty(If.DecoratedWith<InjectAttribute>)) .ApplyAutoRegistration();Mixing with XML:var context = new XmlApplicationContext( "assembly://Spring.AutoRegistration.Test/ Spring.AutoRegistration.Test/SpringObjectsSimple.xml"); context.Configure() .IncludeAssembly(x => x.FullName.StartsWith("Spring.AutoRegistration.Test")) .Include(x => x.ImplementsITypeName(), Then.Register().UsingSingleton()) .ApplyAutoRegistration();Using the NamedAttribute and InjectAttribute: // uses the type name public class GrayImagePlugin : IImagePlugin { } [Named("Resize")] public class ResizeImagePlugin : IImagePlugin { } public class PluginExecutor : IPluginExecutor { [Inject] public IImagePlugin GrayImagePlugin { get; set; } [Inject] public IImagePlugin Resize { get; set; } } Let me know about issues, bugs and suggestions using the Spring.AutoRegistration. Como implementar um conjuto de condicoes definidas pelo usuario de forma simples que possa ser armazenado em um banco de dados em Java ?Ex.: if(tag1.equals(value1) && tag2.equals(value2)) { doThis(); } se tornar algo do tipo: Var<Integer> tag1 = new Var<Integer>(); Var<Integer> tag2 = new Var<Integer>(); Var<Integer> value1 = new Var<Integer>(); Var<Integer> value2 = new Var<Integer>(); // tag1 == value && tag2 == value2 Rule r1 = new Rule( and( eq(tag1, value1), eq(tag2, value2) ) ); tag1.bind(10); tag2.bind(30); value1.bind(10); value2.bind(30); System.out.println(r1.eval());Vamos definir que esse conjunto de condicoes e uma regra (rule) que precisa ser avaliada com certas variaveis. Para simplificar, nossas regras so podem ter os operadores Equals e NotEquals, e os conectores And e Or. Apos voce entender como e implementado, voce pode estender para os seus proprios operadores e conectores.Para definirmos nossas regras, precisamos construir um objeto que represente uma funcao, ou seja, um Functor. Um Functor e semelhante a um callback ou uma interface com somente um metodo, comumente usando no padrao Command, que podemos passa-los como argumentos para outros objetos executarem a funcao, a diferenca e podemos montar um Functor dinamicamente, semelhante a linguagens funcionais.interface Functor<T> { T eval();} Definido o Functor, precisamos definir onde ficaram nossas variaveis e/ou parametros usados na regra:public class Var<T> implements Functor<T> { private T value; @Override public T eval() { return value; } public void bind(T value) { this.value = value; }}Um Var e um caso particular de um Functor onde sempre retornara o valor de uma variavel.Agora vamos definir um Predicado.public interface Predicate extends Functor<Boolean> { Boolean eval();}Um Predicado e outro caso de um Functor que sempre retorna um valor true ou false. Para o nosso caso de analisador de regras, e que queremos.Agora vamos comecar a construir nossos conectores:// Andpublic class AndOp implements Predicate { private Predicate[] ps; public AndOp(Predicate... ps) { this.ps = ps; } @Override public Boolean eval() { for(Predicate p : ps) { if(!p.eval()) return false; } return true; }}// Orpublic class OrOp implements Predicate { private Predicate[] ps; public OrOp(Predicate... ps) { this.ps = ps; } @Override public Boolean eval() { for (Predicate p : ps) { if (p.eval()) return true; } return false;