私は現在、.netプロジェクトc#への依存性注入のためにspring.netを使用しています。xml構成ファイルを介してSpringを構成しています。これで私は自分のオブジェクトなどを作成しています。
xmlファイル内に文字列値を使用して定数オブジェクトを作成したいと思います。これは可能ですか?もしそうなら、どうすればこれを達成できますか?先に進んでこの値を複数の場所で使用したいので、このアプローチを採用しています。
私は現在、.netプロジェクトc#への依存性注入のためにspring.netを使用しています。xml構成ファイルを介してSpringを構成しています。これで私は自分のオブジェクトなどを作成しています。
xmlファイル内に文字列値を使用して定数オブジェクトを作成したいと思います。これは可能ですか?もしそうなら、どうすればこれを達成できますか?先に進んでこの値を複数の場所で使用したいので、このアプローチを採用しています。
MyStringはシングルトンです。これは、スプリングオブジェクトがデフォルトでシングルトンであるためです。
<object id="MyString" type="System.String" factory-method="Copy">
<constructor-arg index="0">
<value>SomeStringValue</value>
</constructor-arg>
</object>
参照方法は次のMyString
とおりです。
<object id="SomeObj" type="ExampleSpring.SomeObj, ExampleSpring">
<property name="Str" ref="MyString" />
</object>
この文字列をクラスの読み取り専用フィールドとしてカプセル化してから、クラスをシングルトンスコープとしてSpring(または他のリーダーが使用するIoC)に登録することをお勧めします。
これの利点は、文字列オブジェクトを解決しようとする必要がないことです。文字列を含むオブジェクトを解決します(したがって、このような文字列を含むオブジェクトを多数持つことができます)。
本当に必要な場合は、constructor-argタグを使用して、オブジェクトを登録するときにパラメーター固有のインジェクション値を定義できます。そうすれば、DatabaseObjectを解決するときに、Springが「connectionString」という名前のコンストラクターパラメーターを検出すると、XMLで指定する特定のリテラルを提供する必要があります。ローズインディアでもっと読む。
他の2つの回答は、コンテナ内の文字列オブジェクトを構成するための合理的な回避策を示しています。
構成ファイルで文字列定数を再利用する場合は、を使用することをお勧めしますVariablePlaceholderConfigurer
。次に、次のように構成ファイルを記述できます。
<object id="JohnUsingVariableSource"
type="XmlConfig.StringInjection.Person, XmlConfig">
<property name="Name" value="${JohnsFullName}" />
</object>
プレースホルダーの値は、app.configのセクションやJavaスタイルのプロパティファイルなど、${JohnsFullName}
多くの可変ソースから構成できます。appSettings