想象一下,我有包含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