📜 ⬆️ ⬇️

Unity Auto Registration

Unity Auto Registration


Unity Auto Registration expands the capabilities of the Unity container by providing a fluent interface for automatic type registration according to the rules. Using just a few lines of code, you can scan the specified assembly and register all types that match the specified rules.


You can use predicates (Predicate), lambda expressions, and method calls as rules. If the helper provides all sample options for describing conditions.

Below is a sample configuration using Unity Auto Registration:
')
  1. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  2. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  3. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  4. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  5. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  6. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  7. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  8. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  9. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  10. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  11. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  12. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  13. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  14. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  15. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  16. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  17. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  18. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();
  19. var container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom( "Plugin.dll" ) .IncludeAllLoadedAssemblies() .ExcludeSystemAssemblies() .ExcludeAssemblies(a => a.GetName().FullName.Contains( "Test" )) .Include(If.Implements<ILogger>, Then.Register().UsingPerCallMode()) .Include(If.ImplementsITypeName, Then.Register().WithTypeName()) .Include(If.Implements<ICustomerRepository>, Then.Register().WithName( "Sample" )) .Include(If.Implements<IOrderRepository>, Then.Register().AsSingleInterfaceOfType().UsingPerCallMode()) .Include(If.DecoratedWith<LoggerAttribute>, Then.Register() .AsInterface<IDisposable>() .WithTypeName() .UsingLifetime<MyLifetimeManager>()) .Exclude(t => t.Name.Contains( "Trace" )) .ApplyAutoRegistration();

Resources


Download the staff at http://autoregistration.codeplex.com/

Source: https://habr.com/ru/post/74757/


All Articles