私は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を呼び出すことができますか?
大変感謝しています。
EDIT: (例えば、これは「のLogEvent」メッセージであることを私に教えてくれるので)私はすでにXMLのヘッダを解析して、私のバージョンと種類を養うクラスを持っています。それで私がDIを利用することを検討していた理由は、解析された値(この場合は "LogEvent"をResolverに渡すことができただけです)です。このシナリオが適用されない場合でも、ファクトリメソッド。私は、動的呼び出しのこのタイプが可能であるかを理解したいと思います。
おかげで、
S
これは関連性の高いものです:http://blog.ploeh.dk/2011/09/19/MessageDispatchingWithoutServiceLocation.aspx –