类库中的依赖项注入如何
本文关键字:注入 依赖 类库 | 更新日期: 2023-09-27 18:24:04
我有类库项目,大多数类都是内部的,无法从外部访问。我想从这个库中注入这些类的依赖项。我不知道我该怎么做?
样本代码:
internal interface IClass1
{
}
internal class Class1 : IClass1
{
}
internal class Class2
{
private readonly IClass1 _class1;
// I want to inject this interface from inside this project.
//Not from outside this project.
// Because this class may not accessible from other class.
internal Class2(IClass1 class1)
{
_class1 = class1;
}
internal Class2() :this(new Class1())
{
// I do it this way.
// But i want to do it using any IOC container
}
}
我可以建议几个选项:
- 可以在容器中注册这些类型,但必须使用反射,并使用非通用注册API。也许Ninject可以在这个过程中提供帮助,但我在文档中没有发现任何有意义的东西
- 如果可以修改库的源,则可以使用NinjectModule创建容器注册库,然后将InternalsVisibleToAttribute应用于原始库
我对此没有太多经验,因为我是使用IoC(DI)的新手。但我在企业库中看到了一个特性,即具有子容器,容器的层次结构。
http://msdn.microsoft.com/en-us/library/ff660895(v=pandp.20).aspx#container_differentmappings
难道你的库中不能有一个子容器作为公共容器,这样它就可以用来从程序集内部注入对象吗?(在另一个程序集中具有父IoC容器)。
不确定是否所有IoC都有这个功能(到目前为止我只使用了Unity)。