我在库中有一个外观,通过一个简单的界面公开了一些复杂的功能。我的问题是如何为外观中使用的内部类型执行依赖注入。假设我的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。任何帮助表示赞赏。
答案 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无法查看和创建它们,因此无法注入依赖项。