MEFを使用してプラグインフレームワークを実装しようとしていますが、インターフェイスがあります
public interface IPlugin
{
string SomeProperty {get;set;}
IList<string> DoSomething(string somevalue);
}
多くをインポートする実装を行うことを考えていました
public class MainContainer : IPlugin
{
public string _name;
public MainContianer(){
}
public MainContainer(string name){
_name = name;
}
[ImportMany]
List<Lazy<IPlugin, string>> plugins;
string SomeProperty { get {
var plugin = plugins.Where(a => a.Metadata.Equals(_name)).FirstOrDefault();
if (plugin != null) {
return plugin.Value.SomeProperty;
}
throw new CustomException();
} }
List<string> DoSomething(string value){
var plugin = plugins.Where(a => a.Metadata.Equals(_name)).FirstOrDefault();
if (plugin != null) {
return plugin.Value.DoSomething(value);
}
throw new CustomException();
}
}
私の質問は、プロパティとメソッドごとに同じブロックを作成するよりも、これを実装するためのより良い方法があるかどうかです。
var plugin = plugins.Where(a => a.Metadata.Equals(_name)).FirstOrDefault();
if (plugin != null) {
return plugin.Value.xxx
}