[英]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.