Unity 1.2依赖注入内部类型

时间:2010-06-09 23:01:45

标签: asp.net dependency-injection unity-container application-blocks

我在库中有一个外观,通过一个简单的界面公开了一些复杂的功能。我的问题是如何为外观中使用的内部类型执行依赖注入。假设我的C#库代码看起来像 -

public class XYZfacade:IFacade
{
    [Dependency]
    internal IType1 type1
    {
        get;
        set;
    }
    [Dependency]
    internal IType2 type2
    {
        get;
        set;
    }
    public string SomeFunction()
    {
        return type1.someString();
    }
}

internal class TypeA
{
....
}
internal class TypeB
{
....
}

我的网站代码就像 -

 IUnityContainer container = new UnityContainer();
 container.RegisterType<IType1, TypeA>();
 container.RegisterType<IType2, TypeB>();
 container.RegisterType<IFacade, XYZFacade>();
 ...
 ...
 IFacade facade = container.Resolve<IFacade>();

这里facade.SomeFunction()抛出异常,因为facade.type1和facade.type2为null。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

建议不要注射内部课程。

我在程序集中创建了一个公共工厂类,它声明了内部实现,可用于实例化这些类型:

public class FactoryClass
{
   public IType1 FirstDependency
   {
     get
     {
       return new Type1();
     }
   }

   public IType2 SecondDependency
   {
     get
     {
       return new Type2();
     }
   }
 }

XYZFacade中的依赖关系是FactoryClass类:

public class XYZfacade:IFacade
{
   [Dependency]
   public FactoryClass Factory
   {
      get;
      set;
   }
}

如果您想使其可测试,请为FactoryClass创建一个接口。

答案 1 :(得分:2)

如果容器创建代码在内部类型的程序集之外,Unity无法查看和创建它们,因此无法注入依赖项。