Unity RegisterTypes无法正常工作

时间:2015-10-16 10:25:59

标签: c# unity-container

我使用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始终是一个空数组。

1 个答案:

答案 0 :(得分:1)

问题是AllClasses.FromAssembliesInBasePath()找不到您的AdditionSubtraktion类型,因为它们是internal

让它找到它们最明显的方法就是让它们成为public

你实际上可以使它与internal一起使用,但不建议这样做(内部或私人依赖的解决方案只是一种不推荐的做法)并且会是" hacky"至少可以说(使用InternalsVisibleTo,如果你想谷歌)。如果我绝对必须对此进行扩展,但您需要提供有关如何在解决方案上构建项目的更多详细信息。