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

我需要我的代码看起来像这样。

是的,我对注射相当陌生。我相当肯定我错过了一个基本原则。

谢谢你的帮助。

4

2 回答 2

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);
        }
    }
}
于 2013-05-05T11:47:14.097 回答
0

这是一个糟糕的问题。我发现这需要通过控制这些实现的类来实现。

于 2013-07-15T21:25:07.663 回答