2013-05-01 46 views
0
public interface IFoo {} 

public class Foo : IFoo {} 

public sealed class NinjaModule : NinjectModule //Appropriately configured in project 
{ 
    public override void Load() 
    { 
     Bind<IFoo>.To<Foo>.InTransientScope(); 
    } 
} 

public class SomeOtherClass : ISomeOtherInterface 
{ 
    public SomeOtherClass(); 

    public IFoo GetFoo(IFoo foo) 
    { 
     return foo; 
    } 

    public void GetFoos() 
    { 
     foreach (var thing in everything) 
     { 
      var localFoo = GetFoo(); 
      localFoo.UniqueProperty = "I am unique"; 
      _fooList.Add(localFoo); 
     } 
    } 
} 

我需要我的代碼看起來像這樣。您可以使用方法注入或某種其他形式的注入創建類的多個實例嗎?

是的,我是相當新的注入。我相當肯定我缺少一個基本原則。

感謝您的任何幫助。

+0

foreach循環的目的是什麼?你創建了幾個IFoo實例並把它們放到一個列表中。但是一切似乎都沒有被使用。或者你太簡化你的代碼。 – treze 2013-05-05 11:40:42

回答

0

這是一個糟糕的問題。我想到這需要由控制這些實現的類來實現。

0

我認爲這裏最好的方法是使用工廠創建不同的Foo實例。而Ninject和Factory的擴展很容易。

public sealed class NinjaModule : NinjectModule //Appropriately configured in project 
{ 
    public override void Load() 
    { 
     Bind<IFoo>().To<Foo>().InTransientScope(); 
     Bind<IFooFactory>().ToFactory(); 
    } 
} 

public interface IFooFactory 
{ 
    IFoo CreateFoo(); 
} 


public class SomeOtherClass : ISomeOtherInterface 
{ 
    private IFooFactory fooFactory; 

    public SomeOtherClass(IFooFactory fooFactory) 
    { 
     this.fooFactory = fooFactory; 
    } 

    public IFoo GetFoo(IFoo foo) 
    { 
     return this.fooFactory.CreateFoo(); 
    } 

    public void GetFoos() 
    { 
     foreach (var thing in everything) 
     { 
      var localFoo = GetFoo(); 
      localFoo.UniqueProperty = "I am unique"; 
      _fooList.Add(localFoo); 
     } 
    } 
} 
+0

這是一個糟糕的問題。我想到這需要由控制這些實現的類來實現。 – rkralston 2013-07-15 21:24:28

相關問題