0
コンソールC#プロジェクトを作成しました。コードではモジュールを作った。私のコードはこのように見えます。パスを設定してプラグインを取得する方法
[Import]
public IMessageSender MessageSender { get; set; }
public static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
public void Run()
{
Compose();
Console.ReadLine(MessageSender.Send("Message Sent"));
}
private void Compose()
{
AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
public interface IMessageSender
{
string Send(string message);
}
[Export(typeof(IMessageSender))]
public class EmailSender : IMessageSender
{
public void Send(string message)
{
return message;
}
}
正常に動作します。しかし、今、私は私の溶液中で新しいプロジェクトを追加し、私は私のコードの一部を変更し、メインコンソールプログラムに今で AnotherProject-> EmailSender.cs
[Export(typeof(IMessageSender))]
public class EmailSender : IMessageSender
{
public void Send(string message)
{
return message;
}
}
にモジュールを追加しました。
private void Compose()
{
var catalog = new DirectoryCatalog(path);
//AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
今はこのプログラムを実行します。それはモジュールをロードしません。メインプログラムのMessageSenderはnullです。私は何をしたのですか。
すべてが正しく行われていますが、プラグインのその無効は入力ミスです。それは文字列です。私はImportManyをやっていません。なぜなら、私はこのアプリケーション用に1つのモジュールしか持たないことを知っているからです。ディレクトリカタログに* .dllを追加する必要があると思います。それはうまくいくかもしれません。 –