いくつかのデータ(特にSharePointドキュメントライブラリからInfoPath xml)を渡して処理するWebサービスがあります。私は現在、どのようなフォームデータ "戦略"をロードするためにNinjectを使用しています。文字列に基づくオブジェクトバインド
Webサービス(エントリポイント)観光情報
namespace Core.Forms
{
public class IPFormDataContext
{
private IPFormDataStrategy _ipFormDataStrategy;
public IPFormDataContext(IPFormDataStrategy strategy)
{
_ipFormDataStrategy = strategy;
}
public bool DoWork(XmlDocument form)
{
return _ipFormDataStrategy.DoWork(form);
}
}
public abstract class IPFormDataStrategy
{
public abstract bool DoWork(XmlDocument form);
}
}
namespace Core.Forms.FormStrategies
{
class FormAStrategy : IPFormDataStrategy
{
public override bool DoWork(XmlDocument form)
{
// Deserialize form using (xsd.exe generated) FormAData
// and perform some operation on the resulting data.
return resultOfWork;
}
}
}
FormBStrategy関連
namespace Web.Services
{
public bool AddForm(XmlDocument form, string formName)
{
IKernel kernel = new StandardKernel(new FormsModule());
var ctx = kernel.Get<IPFormDataContext>(formName);
return ctx.DoWork(form);
}
}
Ninject関連するもの
namespace Core.Modules
{
public class FormsModule : NinjectModule
{
public override void Load()
{
Bind<IPFormDataContext>().ToSelf().Named("FormA");
Bind<IPFormDataContext>().ToSelf().Named("FormB");
// Snip
Bind<IPFormDataStrategy>().To<FormAStratgey>()
.WhenParentNamed("FormA");
Bind<IPFormDataStrategy>().To<FormBStrategy>()
.WhenParentNamed("FormB");
// Snip
}
}
}
柄ずっと同じされる:ここではいくつかのコード(質問は以下のは)です私が挙げていない他の7つの戦略もそうです。私はwebserviceにフォームxmlを渡し、入ってくるフォームタイプに基づいて正しいフォームの逆シリアル化を呼び出す方法を見つけようとしています。
上記のコードは「動作しています。それは私が読んでいるものから悪いものであるNinjectのサービスの場所のいくつかの並べ替えをしているように感じる。しかし、私はこれを達成するための適切な方法を考えることができません。 NinjectやIOC/DIフレームワークを使用して死んでいるわけではありません。
私がやっていることは間違っていますか?私は正しい方向に指摘できますか?私は好きではない
これはジェネリックのための良い場所のようです: 'IPFormDataContext T:IPFormDataStrategy'のようなことをすることができますか?私は本当に忍耐に精通していない。 –
lukegravitt