カスタム属性(AutoBindAttributeと呼ばれる)を作成する
public class AutoBindAttribute : Attribute
{
}
以下のように使用します([AutroBind]で自動的にバインドするすべての実装を装飾します)
public interface IMyClass {}
[AutoBind]
public class MyClass : IMyClass {}
次に、IServiceCollectionの拡張メソッドを作成します。
public class ServiceCollectionExtentions
{
public static void AutoBind(this IServiceCollection source, params Assembly[] assemblies)
{
source.Scan(scan => scan.FromAssemblies(assemblies)
.AddClasses(classes => classes.WithAttribute<AutoBindAttribute>())
.AsImplementedInterfaces()
.WithTransientLifetime();
}
}
それをStartup.csで呼び出します
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AutoBind(typeof(Startup).Assembly);
}
}
注:ServiceCollectionExtentions
シングルトンなどのすべてのスコープをサポートするようにクラスを改善できます。この例は、一時的な存続期間のみを示しています。
楽しい!!!