我使用Unity作为IoC。我喜欢用RegisterTypes在容器中注册一些类,如下所示:
container.RegisterTypes(
AllClasses.FromAssembliesInBasePath(),
WithMappings.FromAllInterfaces,
WithName.TypeName,
WithLifetime.PerResolve
);
但是类型没有实例化。我的接口类是:
namespace Taschenrechner
{
public interface IBerechne
{
int Berechnen(Formel formel);
}
}
我的课程:
class Addition : IRechenoperation
{
public char Operator
{
get
{
return '+';
}
}
public int Berechnen(int operand1, int operand2)
{
return operand1 + operand2;
}
}
class Subtraktion : IRechenoperation
{
public char Operator
{
get
{
return '-';
}
}
public int Berechnen(int operand1, int operand2)
{
return operand1 - operand2;
}
}
我喜欢这种类型的建设者如下:
public Parser(Formel formel,IRechenoperation[] rechenoperationen)
{
this.ergebnisformel = formel;
this.rechenoperationen = rechenoperationen;
}
当我执行代码时,rechenoperationen始终是一个空数组。
答案 0 :(得分:1)
问题是AllClasses.FromAssembliesInBasePath()
找不到您的Addition
和Subtraktion
类型,因为它们是internal
。
让它找到它们最明显的方法就是让它们成为public
。
你实际上可以使它与internal
一起使用,但不建议这样做(内部或私人依赖的解决方案只是一种不推荐的做法)并且会是" hacky"至少可以说(使用InternalsVisibleTo
,如果你想谷歌)。如果我绝对必须对此进行扩展,但您需要提供有关如何在解决方案上构建项目的更多详细信息。