DI に関して助けが必要ですが、以前に DI を使用したことがないので、概念は私にとって新しいものです。いくつかのパラメータに基づいてログ データを DB またはフラット ファイルまたはイベント ログに保存したい
たとえば、国コードが GBR の場合、イベント ログは DB に保存されます。国コードが USA の場合、イベント ログはフラット ファイルに保存されます。国コードが USA の場合、イベント ログは Windows イベント ログに保存されます。
上記の問題をDIパターンで実装する同様のコードを取得しました。ここにコードがあります
public interface ILog
{
void Log(string text);
}
次に、クラスでこのインターフェースを使用します
public class SomeClass
{
[Dependency]
public ILog Log {get;set;}
}
実行時にそれらの依存関係を注入する
public class SomeClassFactory
{
public SomeClass Create()
{
var result = new SomeClass();
DependencyInjector.Inject(result);
return result;
}
}
インスタンスは app.config で構成されます。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name ="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity>
<typeAliases>
<typeAlias alias="singleton"
type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
</typeAliases>
<containers>
<container>
<types>
<type type="MyAssembly.ILog,MyAssembly"
mapTo="MyImplementations.SqlLog, MyImplementations">
<lifetime type="singleton"/>
</type>
</types>
</container>
</containers>
</unity>
</configuration>
しかし、この上記のコードの問題は、一度に 1 つのことしか実行しないことです。DB 用のアセンブリ実装がある場合は DB に保存され、フラット ファイル用のアセンブリ実装がある場合はフラット ファイルに保存されます。
しかし、私の要件は、国コードに基づいてデータを保存したいなど、ビットの違いは同じです。その結果、コードと構成ファイルで変更する必要があるものは、国コードに基づいてどこにでもデータを保存できます。コードとコンセプトについて教えてください。ありがとう