この投稿の分かりやすいタイトルの作成方法は不明でした。そのクラスが依存関係としているインタフェースの具体的な実装のためのクラスのインスタンスの作成
は、私はクラス
[Export(typeof(IMessageSender))]
public class MessageSender : IMessageSender
{
private IMessagingInterface _messagingInterface;
private IEventAggregator _eventAggregator;
[ImportingConstructor]
public MessageSender(IMessagingInterface messagingInterface, IEventAggregator eventAggregator)
{
_messagingInterface = messagingInterface;
_eventAggregator = eventAggregator;
}
public void SendMessage(string message)
{
_messagingInterface.Write(message);
}
public InterfaceStatus GetStatus()
{
return _messagingInterface.Status;
}
...
etc. Many methods in this class.
}
を持っていると私は、そのような自分のアプリケーションで
[Export(typeof(IMessagingInterface))]
public SerialPortInterface : IMessagingInterface
{
..
}
[Export(typeof(IMessagingInterface))]
public UdpInterface : IMessagingInterface
{
..
}
etc
として、IMessagingInterface
いくつかの異なるがあると、私は現在、自分のアプリケーションの起動時にこのようなさまざまな部分をインスタンス化:
eventAggregator = new EventAggregator();
batch.AddExportedValue<IMessageSender>("SerialPortSender", new MessageSender(new SerialPortInterface(), eventAggregator);
batch.AddExportedValue<IMessageSender>("UdpSender", new MessageSender(new UdpInterface(), eventAggregator);
...
etc for the rest
次に、私が指したいものを指定することができます契約名を使用して他の場所に影響を与えます。
しかし、私はブートストラップで自分自身でこのコンポジションを行い、new
でインスタンスを作成するのは間違っていて不必要ですが、別のやり方ではありませんでした。
IMessagingInterfaceの実装用にカタログを作成し、そのカタログについて知っているコンテナを使用して 'MessageSender'を作成してください。 MEFコンテナはインスタンス自体を管理します。 – Dennis