0

私は抽象工場を持っています。今日は、ninject でバインドしたいと思いました。どれが一番いいのかわかりませんが、私はこの方法でやりました。それから私はプロバイダーの方法で試してみました。そのため、プロバイダー インターフェイスを実装しました。問題は、私がこのように呼び出すことです kernel.Bind<IModelValidator>().ToProvider<ModelValidatingFactory>()

ModelValidatingFactory の代わりに IModelValidatingFactory を使用できないため、ファクトリ (リスト) とは何かをパラメーターに指定する必要があります。IModelValidator インターフェイスのファクトリを作成したいと考えています。クラスタイプをキーとして使用したいと思います。コンストラクターにパラメーターを与えるにはどうすればよいですか、またはそれを機能させるための最良の方法はどれですか? タイプを使用する場合はそれを渡す必要があるため、キーには何を使用する必要がありますか。文字列をタイプとして使用するのは好きではありません

Ninjectのメソッドを見たの.ToFactoryですが、よくわかりません。より多くの実装の可能性を見ました。あなたは私に何をアドバイスしますか?

// this is what I would like to try, but there are some error with this. I can not reference to the type, and I can not give factory
     public class ModelValidatingFactory : Provider<IModelValidator>, TandoCare.Desktop.Infrastructure.ModelValidating.IModelValidatingFactory
        {
            public IDictionary<Type, Func<IModelValidator>> validationFactory = new Dictionary<Type, Func<IModelValidator>>();

            public ModelValidatingFactory(IDictionary<Type, Func<IModelValidator>> factory)
            {
                //validationFactory.Add(typeof(PatientModel), () => new PatientRegistrationValidator());
                validationFactory = factory;
            }

            protected override IModelValidator CreateInstance(Ninject.Activation.IContext context)
            {
                return validationFactory[context.Request.Target.Type]();
            }

            public IModelValidator GetValidator(object model)
            {
                Type type = model.GetType();
                return validationFactory[type]();
            }

            public IModelValidator this[object lookedType]
            {
                get
                {
                    Type type = lookedType.GetType();
                    return validationFactory[type]();
                }
            }
        }

このように .ToFactory メソッドをどのように使用すればよいですか?

4

1 に答える 1

0

私の理解が正しければ、あなたの懸念は、ファクトリに特定のコンストラクター引数を提供したいということであり、そのコンストラクター引数は、Ninject がバインド方法を知っているものではありません。

Ninject がファクトリのインスタンスを生成する方法を認識できるように、バインディングをセットアップできるはずです。このようなもの:

kernel.Bind<IModelValidator>()
      .ToProvider<ModelValidatingFactory>();
kernel.Bind<ModelValidatingFactory>()
      .ToConstant(new ModelValidatingFactory(/*pass your parameter */));
于 2013-05-30T17:31:17.173 に答える