2013-05-01 98 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

相关问题