我有一個場景,我們正在接收XML消息。我需要查看消息的頭部以確定它是什麼消息類型/版本(來自遺留系統)。我希望能夠註冊消息類型然後傳入參數來解析特定的類型。我是DI/Unity的新手(如果你沒有注意到),所以我可能會嘗試應用一個不好的練習或不正確地接近它。想要從我們正在使用的現有工廠模式中實現這一目標。C#Unity - 動態解析註冊類型
這顯然作品:
XDocument xml = XDocument.Load(@"D:\Demos\XmlMessages\AllMessages\LogEvent.xml");
var container = new UnityContainer();
//Base Works
container.RegisterType<IMessage, LogEvent>(new InjectionProperty("XmlDoc", xml));
var baseMessage = container.Resolve<BaseMessage>();
baseMessage.ParseDocument();
不知道如何申請這兒的動態分辨率?:
XDocument xml = XDocument.Load(@"D:\Demos\XmlMessages\AllMessages\LogEvent.xml");
var container = new UnityContainer();
container.RegisterType<IMessage, LogEvent>("LogEvent", new InjectionProperty("XmlDoc", xml));
var baseMessage = container.Resolve(typeof(IMessage), "LogEvent");
baseMessage.ParseDocument(); //Just returning type so obviously can't run this
正在註冊我的信息是正確的做法?如果是這樣,那麼我怎麼才能完成解決我的BaseMessage,所以我可以調用ParseDocument?
任何信息/建議非常感謝。
編輯: 我已經有一個類,將解析XML的頭和餵我的版本和類型(因此,例如,它會告訴我,這是一個「的LogEvent」消息)。這就是爲什麼我正在考慮使用DI是因爲我可以簡單地將解析的值(在本例中爲「LogEvent」)傳遞給Resolver,只是想根據Sebastian的反應進行更新。即使這種情況不適用,我應該堅持工廠方法。我想了解這種類型的動態調用的將是可能的。
感謝,
小號
您可能會發現這一點相關:http://blog.ploeh.dk/2011/09/19/MessageDispatchingWithoutServiceLocation.aspx –