Tôi có dịch vụ web sẽ thực hiện những việc với một số dữ liệu được chuyển vào (cụ thể là InfoPath xml từ thư viện tài liệu SharePoint). Tôi hiện đang sử dụng Ninject để xử lý "chiến lược" dữ liệu biểu mẫu nào cần tải. Dưới đây là một số mã (câu hỏi sau):Ràng buộc Ninject dựa trên chuỗi
Web Service (Entry Point)
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 liên quan Những điều
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
}
}
}
mẫu liên quan Những điều
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 được nhiều giống , cũng như 7 chiến lược khác mà tôi không liệt kê. Tôi đang cố gắng tìm một cách để chuyển vào biểu mẫu xml tới webservice và gọi đúng mẫu deserialization dựa trên loại biểu mẫu đang đến.
Đoạn mã trên "hoạt động"; nhưng có vẻ như tôi đang làm một số vị trí dịch vụ ở Ninject, mà từ những gì tôi đang đọc là một điều xấu . Nhưng tôi không thể nghĩ ra một cách thích hợp để thực hiện điều này. Tôi chưa chết khi sử dụng Ninject, hoặc bất kỳ khuôn khổ IOC/DI nào cho vấn đề đó.
Là những gì tôi đang làm ... sai? Tôi có thể chỉ ra đúng hướng không?
Điều này có vẻ như là một nơi tốt cho một chung: bạn có thể làm một cái gì đó như 'IPFormDataContext nơi T: IPFormDataStrategy' để làm sạch nó? Tôi không thực sự quen thuộc với ninject. –
lukegravitt