2

次のクラスがあるとしましょう。

public class Service1
{
   public Service1(Dependency1 dependency1, Dependency2 dependency2, string myAppSetting)
   {
   }
}

public class Service2
{
   public Service2(DependencyA dependency1, ..., DependencyD dependency4, string myAppSetting)
   {
   }
}

Unity コンテナーは、依存関係の挿入によってコンストラクターのパラメーターを設定するために使用されます。container.Resolve(..) メソッドが直接呼び出されることはありません。

上記のクラスにはさまざまなパラメーターがありますが、最後のパラメーターstring myAppSettingは常に同じです。特定のプリミティブ型と名前を持つパラメーターを常に異なるクラスの特定の値に解決するように Unity コンテナーを構成する方法はありますか?

私には壊れやすいと思われるすべてのタイプの注入コンストラクターを登録できることを知っています。もう 1 つの方法は、カスタム クラスで文字列パラメーターをラップすることです。しかし、特定のプリミティブ型コンストラクターのパラメーターを処理する方法があるかどうか疑問に思っていました。

4

2 に答える 2

2

をラップするインターフェイスを作成しましたAppSettings。これにより、アプリケーション設定を自分の型に挿入できます。

IAppSettings

public interface IAppSettings {
    string MySetting { get; set; }
    ...
}

UnityConfig

container.RegisterInstance<IAppSettings>(AppSettings.Current);
container.RegisterType<IService1, Service1>();
container.RegisterType<IService2, Service2>();

サービス1

public class Service1
{
    public Service1(Dependency1 dependency1, Dependency2 dependency2, IAppSettings appSettings)
    {
        var mySetting = appSettings.MySetting;
    }
}

プリミティブ パラメーターのオプションを次に示します。型をプリミティブ引数コンストラクターに登録しますか?

于 2013-03-29T18:21:39.350 に答える
0

どのクラスでも「myAppSettings」という名前のすべての パラメーターを Unity に解決させることはできないと思います。stringただし、特定のクラスの名前でパラメーターを解決することができます。何かのようなもの:

Container.RegisterType<Service2, Service2>(
            new InjectionConstructor(
                    new ResolvedParameter<string>(), 
                        "myAppSetting"));
于 2013-03-29T17:14:26.313 に答える