2007年04月10日

Enterprise Library Configuration Tool の TypeSelectorEditor (1)

  
前回、書いた[Enterprise Library Configuration Tool の TypeSelectorEditor]の内容に大きな勘違いがあったので、再度、内容を見直しました。

----

Enterprise Library Configuration Tool に 独自の構成設定を組み込んだ際に、ちょっと困ったことが発生しました。

独自ABを作成するときに、GUIで利用するNodeクラスを定義し、そのプロパティの属性を以下のように記述すると、Enterprise Library Configuration Tool で、型名を入力する際に、Type選択ダイアログが表示されるようになります。

public sealed class MyTaskNode : NameTypeConfigurationNode {

...

[Required]
[SRCategory("CategoryGeneral", typeof(Resources))]
[BaseType(typeof(Gushwell.SampleClass), TypeSelectorIncludes.None)]
[Editor(typeof(TypeSelectorEditor), typeof(UITypeEditor))]
public override string Type {
get { return _typeName; }
set {
if (null == value)
throw new ArgumentNullException("value");
_typeName = value;
}
}
}

このダイアログでは、読み込まれているアセンブリの中から、BaseType属性で指定したSampleClassの派生クラスをTreeViewに一覧表示してくれます。
しかし、BaseType属性で指定したクラスが、独自に定義したクラスだと、当然ながら読み込まれていないので、一覧には表示されません。
このような場合は、「Load Assembly...」というボタンを押し、指定したいクラスが定義されているアセンブリをロードさせることができます。

ここまでは、良いのですが、いざ、BaseTypeで指定した、Gushwell.SampleClass を継承したクラスが定義されているアセンブリを読み込もうとすると、


There were no types found in the assembly 'Sample' that
implement or inherit from the base type 'AbstractSample'.


というエラーダイアログが出てしまいます。

読み込むアセンブリファイルが、Enterprise Library Configuration Tool とは別のフォルダにあるため、依存したアセンブリが読み込めないようです。

ダイアログで読み込むアセンブリファイルを 全部 Enterprise Library Configuration Tool と同じフォルダに入れれば、回避できそうですが、それはやりたくありません。
同様に GACに入れれば、回避できますが、そのためだけに、GACに入れるのも良い解決策とは思えません。

結局、Enterprise Library のソースに手を入れるしか、方法はなさそうです。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50747053
この記事へのトラックバック
関連キーワード virtual, override, abstract, sealed, new, base クラスに関して abstract抽象クラス sealed継承禁止 abstract class IClass { public abstract void Execute(); } class Class1 : IClass { public override void Execute() { Console.WriteLine("Class
[お仕事] C# の virtual 関係が自分的に勘違いしやすいのでまとめ。【drill256の日記】at 2007年04月22日 10:03