想象一下,我有包含2個類庫項目的解決方案:project1公開一些接口,project2公開一些接口並且(!)消耗來自project1的接口。我還有project3,它使用所有必要的接口綁定來設置Ninject內核模塊。這看起來像如下:如何避免VS裝配循環參考以訪問DI容器(Ninject)?
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中配置依賴關係嗎?
項目3是否需要使用DI容器 - 您不能將它的依賴項注入到它中,而不是讓它自己解決它?如果你不能,那麼將DiContainer轉移到project1可能是有意義的,因爲這是將這一切結合在一起的粘合劑。將project2接口移動到project1中以使3不需要依賴2也是有意義的。 – Rup