質問があります。NinjectのプロバイダーのようなAutofacのプロバイダーはありますか?つまり、Autofacでそのようなものを使用できますか?
Bind <ISessionFactory> ().ToProvider(new IntegrationTestSessionFactoryProvider());
質問があります。NinjectのプロバイダーのようなAutofacのプロバイダーはありますか?つまり、Autofacでそのようなものを使用できますか?
Bind <ISessionFactory> ().ToProvider(new IntegrationTestSessionFactoryProvider());
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フレームワークからまだ切り離されていることです。