私はIoCとDIで苦労している初心者です。私は、autofac(またはその他の適切な.NET IoCツール)を使用して、接続と接続ファクトリを動的に解決できるようにしたいと考えています。IoC、工場とコンストラクタの引数
シナリオは
Iは以下のコードとDIとのIoCを適用すると、I等の接続ファクトリコンストラクタでnamedParameterの混乱を取得するなどのトレースのためのより多くの設備を備えた別のものへの接続の実装を変更することができます一意のポートを持つ新しい接続を返します(愚かな例ですが、私は工場で何らかの状態を保つ必要があることを示しています)
私はIPとポート範囲に対してプロパティインジェクションを使うことができました。コネクションにコンストラクタのポイントであるIPまたはポートがあることは保証されません。 また、指定されたパラメータによって、引数の名前にも依存しています。
アイデア、パターン、IoCポインタが高く評価されています。
更新:
、より具体的に:どのように私は、注射する接続クラスを変えることができますか?私はプロパティインジェクションと一緒に行くべきですか?または、私ができるトリックは、コンストラクターの引数を使ってより安全な解決を得ることができますか?今
public interface IConnection {
void Open();
void Close();
string Execute(string command);
}
public interface IConnectionFactory {
IConnection CreateConnection();
}
public class Connection : IConnection {
...
public Connection(String ip, int port) {
_ip = ip;
_port = port;
}
public string Execute() {}
public void Open() {}
public void Close() {}
}
public class ConnectionFactory : IConnectionFactory {
//How would I resolve this?
public ConnectionFactory(string ip, int fromPort) {
...
}
public IConnection CreateConnection() {
//How would I resolve this?
return new Connection(ip, fromPort++);
}
}
、用法:
//Register
builder.RegisterType<Connection>().As<IConnection>();
builder.RegisterType<ConnectionFactory>().As<IConnectionFactory>().SingleInstance();
...
var connection = container.Resolve<IConnectionFactory>(
new NamedParameter("ip", "127.0.0.1"),
new NamedParameter("fromPort", 80).CreateConnection());
上記のコードで実際の質問/問題を明確にしたい場合や、特定のIoCフレームワークのドキュメンテーションリンク/サンプルの直後であるかどうかを明確にすることができます。 – Reddog
コメントありがとう、私はより具体的にしようとしました! – Larsbj
私はプロパティインジェクションに進み、最初にオブジェクトを解決してプロパティを渡します。 – sajoshi