类库中的依赖项注入如何

本文关键字:注入 依赖 类库 | 更新日期: 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 
    }
}

类库中的依赖项注入如何

我可以建议几个选项:

  1. 可以在容器中注册这些类型,但必须使用反射,并使用非通用注册API。也许Ninject可以在这个过程中提供帮助,但我在文档中没有发现任何有意义的东西
  2. 如果可以修改库的源,则可以使用NinjectModule创建容器注册库,然后将InternalsVisibleToAttribute应用于原始库

我对此没有太多经验,因为我是使用IoC(DI)的新手。但我在企业库中看到了一个特性,即具有子容器,容器的层次结构。

http://msdn.microsoft.com/en-us/library/ff660895(v=pandp.20).aspx#container_differentmappings

难道你的库中不能有一个子容器作为公共容器,这样它就可以用来从程序集内部注入对象吗?(在另一个程序集中具有父IoC容器)。

不确定是否所有IoC都有这个功能(到目前为止我只使用了Unity)。