IoC 和反序列化问题
IoC and Deserialization trouble
我正在为 IoC 使用 Ninject。
更新
我的存储库使用 XML 序列化程序来保存对象。
如何在反序列化具有相同 class (POCO) 行为和状态且不使用服务定位器反模式的实体后注入依赖项?
这是保存方法:
public void Save(IIntegrationService service)
{
if (service.Id == 0)
servico.Id = GetNewServiceId();
var serializer = new XmlSerializer(service.GetType());
using (TextWriter writer = new StreamWriter(File.Open(GetStoreFileName(service), FileMode.Create)))
{
serializer.Serialize(writer, service);
}
}
这是 GetAll 方法:
public List<IIntegrationService> GetAll()
{
var services = new List<IIntegrationService>();
foreach (string fileName in Directory.GetFiles(StoreDirectory, "*.xml"))
{
Type serviceTypeOfFile = GetServiceTypeByGUID(GetGUIDFromFileName(fileName));
var serializer = new XmlSerializer(serviceTypeOfFile);
using (XmlReader reader = XmlReader.Create(fileName))
{
var service = (IIntegrationService) serializer.Deserialize(reader);
services.Add(service);
}
return services;
}
}
问题是服务创建不是来自 ninject 内核,因此没有注入依赖项。
您可以使用方法 IKernel.Inject(object, IParameter[])
将依赖项注入任何具有 属性 注入的对象。但是,我会回应上面的评论并建议您重构您的代码,以便 services/behavior 与您的数据 objects/entities.
分开
我正在为 IoC 使用 Ninject。
更新
我的存储库使用 XML 序列化程序来保存对象。
如何在反序列化具有相同 class (POCO) 行为和状态且不使用服务定位器反模式的实体后注入依赖项?
这是保存方法:
public void Save(IIntegrationService service)
{
if (service.Id == 0)
servico.Id = GetNewServiceId();
var serializer = new XmlSerializer(service.GetType());
using (TextWriter writer = new StreamWriter(File.Open(GetStoreFileName(service), FileMode.Create)))
{
serializer.Serialize(writer, service);
}
}
这是 GetAll 方法:
public List<IIntegrationService> GetAll()
{
var services = new List<IIntegrationService>();
foreach (string fileName in Directory.GetFiles(StoreDirectory, "*.xml"))
{
Type serviceTypeOfFile = GetServiceTypeByGUID(GetGUIDFromFileName(fileName));
var serializer = new XmlSerializer(serviceTypeOfFile);
using (XmlReader reader = XmlReader.Create(fileName))
{
var service = (IIntegrationService) serializer.Deserialize(reader);
services.Add(service);
}
return services;
}
}
问题是服务创建不是来自 ninject 内核,因此没有注入依赖项。
您可以使用方法 IKernel.Inject(object, IParameter[])
将依赖项注入任何具有 属性 注入的对象。但是,我会回应上面的评论并建议您重构您的代码,以便 services/behavior 与您的数据 objects/entities.