4

質問があります。NinjectのプロバイダーのようなAutofacのプロバイダーはありますか?つまり、Autofacでそのようなものを使用できますか?

Bind <ISessionFactory> ().ToProvider(new IntegrationTestSessionFactoryProvider());
4

1 に答える 1

5

Ninjectのプロバイダーとアクティベーションコンテキストを見ていますが、プロバイダーはAutofacがラムダで処理するシナリオを処理するためのインターフェイスのようです。Ninjectの例では、次のようになります。

Bind<IWeapon>().ToProvider(new SwordProvider());

abstract class SimpleProvider<T> {
// Simple implementations of the junk that you don't care about...

    public object Create(IContext context) {
        return CreateInstance(context);
    }

    protected abstract T CreateInstance(IContext context);
}

class SwordProvider : SimpleProvider<Sword> {
    protected override Sword CreateInstance(IContext context) {
        Sword sword = new Sword();
        // Do some complex initialization here.
        return sword;
    }
}

Autofacのデリゲート構文と比較すると、これはすべてクレイジーなやり過ぎのようです。

builder.Register(context =>
                      {
                           Sword sword = new Sword();
                           // Do some complex initialization here.
                           return sword;
                      }).As<IWeapon>();

編集:あなたのinitがそれ自身のクラスを保証するのに十分複雑であるならば、あなたはまだこれをすることができます:

builder.RegisterType<SwordFactory>();
builder.Register(c => c.Resolve<SwordFactory>().Create()).As<IWeapon>();

// this class can be part of your model
public class SwordFactory
{
    public Sword Create()
    {
        Sword sword = new Sword();
        // Do some complex initialization here.
        return sword;
    }
}

これの良いところは、DIフレームワークからまだ切り離されていることです。

于 2012-07-19T18:22:12.653 に答える