2015-03-02 80 views
1

我正在使用Ninject進行IoC。IoC和反序列化問題

UPDATE

我的倉庫使用XML序列中持久對象。

如何在具有行爲和狀態的實體在同一個類(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內核,所以,依賴關係都沒有注射。

+2

「我的存儲庫使用序列化和反序列化來存儲對象。」 - 向我們顯示代碼。你有什麼嘗試?此外,如果您使用的是二進制序列化,則當您升級應用程序並增加程序集版本號時,會出現令人討厭的驚喜,因爲您的應用程序無法反序列化數據庫中的對象。 – NightOwl888 2015-03-02 21:59:35

+3

你問題的核心是你試圖將依賴注入到實體中。防止這樣做。相關:https://stackoverflow.com/questions/28715966/entity-framework-object-materialization-and-dependency-injection – Steven 2015-03-02 22:21:46

+1

@Vinicius請上傳代碼。或者這個帖子可能被標記。我對你想要做的事情很感興趣。所以請上傳:) – 2015-03-03 08:33:37

回答

1

您可以使用方法IKernel.Inject(object, IParameter[])將依賴關係注入到任何具有注入屬性的對象中。不過,我會迴應上述評論,並建議您重構代碼,以便服務/行爲與數據對象/實體分開。