Unity自動登録
Unity自動登録は、確立されたルールに従ってタイプを自動的に登録するための流fluentなインターフェイスを提供することにより、Unityコンテナの機能を拡張します。 ほんの数行のコードを使用して、指定されたアセンブリをスキャンし、指定されたルールに一致するすべてのタイプを登録できます。
ルールとして、述語、ラムダ式、およびメソッド呼び出しを使用できます。 ヘルパーが条件を記述するためのすべての典型的なオプションを提供する場合。
以下は、Unity自動登録を使用した構成の例です。
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
資源
http://autoregistration.codeplex.com/からダウンロードできます