NInject为每个类型参数的实现实现绑定通用接口

时间:2018-07-20 03:50:26

标签: c# .net dependency-injection inversion-of-control ninject

我将通用接口绑定到其实现:

2018-12-33

添加新类时,还必须手动绑定。有没有办法自动绑定它?我尝试过:

class Program
{
    static void Main(string[] args)
    {
        IKernel kernel = new StandardKernel();

        kernel.Bind<ICreator<bool>>().To<BoolCreator>().InSingletonScope();
        kernel.Bind<ICreator<int>>().To<IntCreator>().InSingletonScope();
        kernel.Bind<ICreator<string>>().To<StringCreator>().InSingletonScope();

        Console.WriteLine(kernel.Get<ICreator<bool>>().Create());
        Console.WriteLine(kernel.Get<ICreator<int>>().Create());
        Console.WriteLine(kernel.Get<ICreator<string>>().Create());
    }
}

interface ICreator<T>
{
    T Create();
}

class BoolCreator : ICreator<bool>
{
    public bool Create() => true;
}

class IntCreator : ICreator<int>
{
    public int Create() => 123;
}

class StringCreator : ICreator<string>
{
    public string Create() => "abc";
}

但不起作用。

谢谢。

1 个答案:

答案 0 :(得分:1)

基于公约的绑定仅适用于公共类型。您的类型默认为内部类型,因为它们没有访问修饰符。公开它们,您的绑定将起作用。