0

私は自分に厳しすぎるのかもしれませんが、私は本当にこれを知りたいです。私は非常にいたずらなコンストラクターを 1 つ持っているので、MEF を使用して生活をシンプルにできると考えました。しかし、私は正しくありませんでした。私は実際にグーグルを使用しましたが、これに比べて何も見つかりませんでした。

次のようなコンストラクタがあります。

public BussinesProcessLoader(ILoader<List<Resource>> resourceLoader, ILoader<List<Project>> projectsLoader)
{
    this.resourceLoader = resourceLoader;
    this.projectsLoader = projectsLoader;
}

今、私は MEF を使用して、次のように BussinesProcessLoader を構成させたいと考えています。

new BussinesProcessLoader(new Loader<List<Resource>>(new Projects.Deserializer.ResourceDeserializer(), fileResolver), new Loader<List<Project>>(new ProjectsDeserializer(), fileResolver))

したがって、次のようなクラスの 2 つのインスタンスをエクスポートできないことがわかりました。

internal class Loader<T> : ILoader<T>
{
    public Loader(IDeserializer<T> deserializer, FileResolver fileResolver)
    {
        this.Deserializer = deserializer;
        this.FileResolver = fileResolver;
    }

    public IDeserializer<T> Deserializer { get; set; }

    public FileResolver FileResolver { get; set; }

    ...
}

2 つの異なる ImportingConstructor 属性と、contractName を持つ 2 つの Exports が必要です...

...そして BussinesProcessLoader のコンストラクターを次のように変更します。

[ImportingConstructor]
public BussinesProcessLoader([Import("ResourceLoader")] ILoader<List<Resource>> resourceLoader, [Import("ProjectsLoader")] ILoader<List<Project>> projectsLoader)
{
    this.resourceLoader = resourceLoader;
    this.projectsLoader = projectsLoader;
}

これを達成することさえ可能ですか?どんな助けでも大歓迎です。

4

1 に答える 1

1

エクスポートには、2つの異なる具象クラスが必要になると思います。

[Export(typeof(ILoader<List<Resource>>))]
internal class ResourceLoader : Loader<List<Resource>>
{
   [ImportingConstructor]
   public ResourceLoader(IDeserializer<List<Resource>> deserializer, FileResolver fileResolver) : base(deserializer, fileResolver)
   {
   }
}

[Export(typeof(ILoader<List<Project>>))]
internal class ProjectLoader : Loader<List<Project>>
{
   [ImportingConstructor]
   public ProjectLoader(IDeserializer<List<Project>> deserializer, FileResolver fileResolver) : base(deserializer, fileResolver)
   {
   }
}

[ImportingConstructor]コンストラクターに属性を追加する必要がありますが、パラメーターBussinesProcessLoaderの属性は必要ありません。[Import("...")]

于 2012-11-21T17:32:19.570 に答える