Solusi oleh @ulrichc terdengar sempurna dan berfungsi dengan baik untuk proyek kecil hingga kelas menengah di mana Anda tidak menggunakan kerangka kerja Dependency Injection seperti Castle atau Ninject tetapi bagaimana jika Anda menggunakan kontainer DI [Castle misalnya] dan Anda memiliki sesuatu seperti berikut ini:
public class IoC
{
private WindsorContainer _container;
private IoC()
{
_container = new WindsorContainer();
}
public static void RegisterFromAssembly(Assembly assembly, string classEndsWith, LifeTime lifeTime)
{
var lifestyle = ConvertLifeStyleType(lifeTime);
_container.Register(AllTypes.FromAssembly(assembly)
.Where(type => type.Name.EndsWith(classEndsWith))
.WithService.AllInterfaces()
.Configure(c => c.LifeStyle.Is(lifestyle))
.WithService.FirstInterface());
}
}
Seperti yang Anda lihat RegisterFromAssembly menelusuri semua tipe di dalam assembly dan secara membabi buta [berdasarkan parameter metode] menambahkannya ke container saat Run-time.
Anda akan membutuhkan sesuatu seperti plugin Agent Mulder yang menyediakan navigasi untuk jenis yang terdaftar atau diselesaikan di dalam container Anda. Ini lagi mungkin secara visual [desain waktu mungkin] bekerja tetapi Anda tidak akan benar-benar yakin kecuali setiap kali Anda menghapus kelas yang tidak digunakan Anda menjalankan semua tes di dalam aplikasi Anda [setiap lapisan yang memungkinkan] untuk menjadi 80% yakin Anda aman. Pesan moral dari cerita ini: kelas mungkin terdengar tidak biasa bagi Resharper tetapi mungkin dibangkitkan ketika Anda menggunakan Injeksi Ketergantungan.