2つのクラスライブラリプロジェクトを含むソリューションがあると想像してください。project1はいくつかのインターフェイスを公開し、project2はいくつかのインターフェイスを公開し、(!)はproject1のインターフェイスを消費します。また、必要なすべてのインターフェイスバインドを使用してNinjectカーネルモジュールをセットアップするproject3もあります。これは次のようになります。
public class Dependencies : NinjectModule
{
public override void Load()
{
Bind<IFileSystemWatcherFactory>().To<FileSystemWatcherFactory>();
Bind<IFileSystemWatcher>().To<FileSystemWatcher>();
Bind( typeof( IRepository<> ) ).To( typeof( NHibernateRepository<> ) );
Bind<IFileSystemHelper>().To<FileSystemHelper>();
Bind<IFileSystemInfoAdapter>().To<FileSystemInfoAdapter>();
Bind<IFolderMonitor>().To<FolderMonitor>();
Bind<IFolderMonitorBrowser>().To<FolderMonitor>();
Bind<IFileManager>().To<FileManager>();
}
}
public class DiContainer
{
private static IKernel _container;
public static IKernel Instance
{
get
{
if ( _container == null )
_container = new StandardKernel( new Dependencies() );
return _container;
}
}
private DiContainer() { }
}
バインディングを設定するには、project3がproject1とproject2を参照する必要があります。DIコンテナを使用するには、project2にproject3への参照が必要ですが、VSにこの参照を追加すると循環依存が発生するというエラーメッセージが表示されるため、追加できません。
その問題にどう対処するか?XMLで依存関係を構成する必要がありますか?