2

Autofac は名前のみによるサービス解決をサポートしていますか? または、常にサービス タイプを指定する必要がありますか?

私はやってみたいです:

container.ResolveNamed("Plugin"); // or container.TryResolvedNamed("Plugin", out instance);

いいえ

container.ResolvedNamed<ISomeInterface>("Plugin"); // etc

ここで、「プラグイン」はタイプではなく、登録名/キーになります。

ありがとう!

4

3 に答える 3

1

TypeAutofacでサービスを解決するには、ジェネリックパラメーターまたはパラメーターのいずれかを介してを指定する必要がありTypeます。2つのオプション:

  1. 関連するすべてのサービスを追加で登録します.Named<object>("service name")
  2. Dictionary<string, Type>Autofacを介して解決する前に自分でタイプを検索できるように、独自のタイプを維持してください。

あなたがすべての登録コードを管理していると仮定すると、おそらくオプション1を選択します。

于 2012-08-14T14:58:06.443 に答える
0

これが私が問題を解決した方法です:

    private Type GetTypeForName(string key)
    {
        return (
            from reg in Container.ComponentRegistry.Registrations 
            from service in reg.Target.Services.OfType<KeyedService>()
            .Where(service => service.ServiceKey.ToString() == key) 
            select service.ServiceType).FirstOrDefault();
    }

同じキーで複数の登録が存在する可能性があるため、明らかに完全な解決策ではありません。

于 2012-08-14T03:00:13.090 に答える