簡體   English   中英

NInject為每個類型參數的實現實現綁定通用接口

[英]NInject binding generic interface to its implementations for each type parameter

我將通用接口綁定到其實現:

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";
}

添加新類時,還必須手動綁定。 有沒有辦法自動綁定它? 我嘗試了這個:

        kernel.Bind(scanner => scanner
            .FromThisAssembly()
            .SelectAllClasses()
            .InheritedFrom(typeof(ICreator<>))
            .BindSingleInterface()
            .Configure(b => b.InSingletonScope()));

但是是行不通的。

謝謝。

基於約定的綁定僅適用於公共類型。 您的類型默認為內部類型,因為它們沒有訪問修飾符。 將它們公開,您的綁定將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM