我有一个 Web 服务,它将处理一些传入的数据(特别是来自 SharePoint 文档库的 InfoPath xml)。我目前正在使用 Ninject 来处理要加载的表单数据“策略”。这是一些代码(问题如下):
网络服务(入口点)
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
}
}
}
模式相关的东西
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 与我未列出的其他 7 种策略大致相同。我正在尝试找到一种方法将表单 xml 传递给 web 服务,并根据传入的表单类型调用正确的表单反序列化。
上面的代码“有效”;但感觉就像我在 Ninject 做某种服务地点,从我读到的内容来看这是一件坏事。但我想不出一个合适的方法来完成这个。对于使用 Ninject 或任何 IOC/DI 框架,我并没有死心塌地。
我在做什么......错了吗?我可以指出正确的方向吗?