我有一个 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 框架,我并没有死心塌地。
我在做什么......错了吗?我可以指出正确的方向吗?