ASP.NET MVC4 アプリケーションがあり、IOC に Unity を使用しています。Unity.MVC4 および UnityConfiguration Nuget パッケージを使用して、登録を支援しています。
大量のインターフェイスとそれに関連するタイプを Unity コンテナーに自動的に登録する必要があります。これを行うために、ダミー インターフェイスを作成しました。すべての実際のインターフェイスが継承する IDependencyInjectionScanner。以下はそれを示すコードです。
public interface IDependencyInjectionScanner
{
}
public interface IChair : IDependencyInjectionScanner
{
NumberOfLegs { get; set; }
}
public class Chair : IChair
{
public NumberOfLegs { get; set; }
}
public interface ITable : IDependencyInjectionScanner
{
NumberOfChairs { get; set; }
}
public class Table : ITable
{
public NumberOfChairs { get; set; }
}
次に、UnityConfiguration を使用して、スキャナーを使用して登録をバインドしました。コントローラーでインターフェイスが正しく解決されています。以下は、バインディングの方法を示すコードです。
Scan(scan =>
{
scan.AssembliesInDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"));
scan.With<FirstInterfaceConvention>();
scan.Include(x => (x.GetInterface(typeof(IDependencyInjectionScanner).Name) != null));
scan.ForRegistries();
});
問題は、階層型ライフタイム マネージャーを使用してスキャナーで検出されたすべての型を登録したいのですが、これを行う方法を理解できることです。UnityConfiguration の GitHub ページhttps://github.com/thedersen/UnityConfigurationには、以下のコードでこれを実現できると記載されています。
Configure<IChair>().AsHierarchicalControlled();
ただし、スキャナーによってバインドされたインターフェイスごとにそれを行う必要がある場合、スキャナーは役に立ちません。
Register<IChair, Chair>().AsHierarchicalControlled();
誰かがこれに対する解決策を見つけるのを手伝ってくれませんか。