2012-06-07 57 views
4

是否有一種簡單的方法使用Ninject將所有Factory接口綁定到ToFactory()擴展方法?Ninject綁定所有工廠接口

public class Foo 
{ 
    readonly IBarFactory barFactory; 

    public Foo(IBarFactory barFactory) 
    { 
     this.barFactory = barFactory; 
    } 

    public void Do() 
    { 
     var bar = this.barFactory.CreateBar(); 
     ... 
    } 
} 

public interface IBarFactory 
{ 
    Bar CreateBar(); 
} 

對於上面的代碼,我可以使用:

kernel.Bind<IBarFactory>().ToFactory(); 

我會怎麼做,但如果我有這樣的需要結合10或20 IFactory的接口?

回答

6

是使用約定:https://github.com/ninject/ninject.extensions.conventions

this.Bind(x => x.From_UseSomeOverloadToSpecifyTheAssemblies() 
       .SelectAllInterfaces().EndingWith("Factory") 
       .BindToFactory(); 
+0

我想我以前看到類似的東西,但再也找不到網站。謝謝。 – Telavian

+0

我試了一下代碼,看不到任何地方如何傳遞一個lambda來綁定,甚至在SelectAllInterfaces()的地方。約定有一個我能找到的最接近的掃描方法,但它仍然與你的語法有很大不同。 – Telavian

+0

我使用的語句是:使用Ninject;使用Ninject.Extensions.Conventions的 ; 使用Ninject.Modules; – Telavian