在我的解决方案中,我在自己的模块中有一个IoC容器(Ninject)。可以很好地解决所有模块的公共类之间的依赖关系,但是如何解决内部类的依赖关系呢?
在BusinessRules项目中,我有一个名为Customer
的公共类。保存新客户之前,必须调用许多验证方法,并且它们都在名为CustomerValidator
的内部类中。这个验证器类是一个实现细节,应仅调用该验证器类以验证新客户,因此其他项目都不应看到它。
问题在于IoC容器看不到CustomerValidator
(因为它是内部的),并且它无法解决这样的依赖关系:
public class Customer(ICustomerValidator customerValidator)
{
//...
}
IoC容器只能看到公共Customer
类,但是对内部CustomerValidator
类的存在一无所知。一种可能的解决方案是使用通常用于单元测试的InternalsVisibleTo属性,然后IoC可以查看我的内部类:
[assembly: InternalsVisibleTo("MySolution.IoC")]
这是可以接受的解决方案吗?在保持CustomerValidator内部的同时,还有其他方法吗?