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 に答える