私は、ソリッドの原則に向けたリファクタリングが真剣に必要なレガシーコードベースに取り組んでいます。シンプルインジェクタ依存性注入コンテナを最初のステップとしてミックスに追加します。私は非常にlog4netの、すなわちのためのRegisterConditional例のようなものを必要とする登録のいずれかのSimple InjectorはTypeFactoryContextと組み合わせてインスタンスファクトリに登録する方法を持っていますか?
:
container.RegisterConditional(
typeof(ILogger),
c => typeof(Logger<>).MakeGenericType(c.Consumer.ImplementationType),
Lifestyle.Singleton,
c => true);
違いは、私がc.Consumerをとるファクトリメソッドから返されたインスタンスを注入したいということです.ImplementationTypeを入力:
container.Register???(
typeof(ILogger),
c => LoggerProvider.GetLogger(c.Consumer.ImplementationType),
Lifestyle.Transient);
これはSimple Injectorで実行できますか?
私はa similar questionの回答を読んでいますが、それだけでは不十分です。 ImplementationTypeはインスタンスファクトリに渡す必要があります。
当分の間、私は > ロガー< TParentを実装し、RegisterConditionalコールにすることを使用します。
public class Logger<TParent> : ILogger
{
private readonly ILogger _decoratedLogger;
public Logger()
{
_decoratedLogger = Logger.GetLogger(typeof(TParent));
}
}
「シンプルインジェクタ依存性注入コンテナを最初のステップとして追加します。」後でDIコンテナを使い始めることもできます。参照:https://stackoverflow.com/a/32033648/264697 – Steven
良い点。私たちは、Pure DIのための簡単な瞬間のために行くことを検討しました。ただし、コードベースは複数のアプリケーションに使用されます。それぞれ保守性を急速に損なう構成ルートが必要です。 – AroglDarthu