私は自分のプロジェクトで依存関係注入を実装するためにautofactを使用しています。私は1つのマスターと他のクライアントデータベースがある状況を持っています。ユーザーのログイン時に、データベースから接続文字列を取得し、autofactのContainerBuilderを使用して接続文字列パラメータを解決します。私は正常に定数値でパラメータを登録する次のコードを使用しています。実行時にautofacで接続文字列パラメータを解決するにはどうすればよいですか?
builder.RegisterType<DbFactory>()
.As<IDbFactory>()
.WithParameter("connectionString", "...")
.InstancePerRequest();
しかし、このコードは、登録時に値がわかっている場合にのみ機能します。しかし、私は実行時にしか知られていない価値が必要です。私は以下のようなコントローラーレベルでこれを試しましたが、助けはありません。
UserViewModel userModel = new UserViewModel();
userModel.Code = _userContext.User.Code;
userModel.Username = _userContext.User.Username;
userModel.Email = _userContext.User.Email;
userModel.IsLocked = _userContext.User.IsLocked;
userModel.ConnectionString = _userContext.User.ConnectionString;
CurrentLoginUser = userModel;
var builder = new ContainerBuilder();
builder.RegisterType<DbFactory>()
.As<IDbFactory>()
.WithParameter("connectionString", userModel.ConnectionString)
.InstancePerRequest();
Autofac.IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
参照[この記事](https://cuttingedge.it/blogs/steven/pivot/entry.php?id=99)。あなたの接続文字列は_runtimeの値であり、オブジェクトの構築中には使用しないでください。代わりに、すでに初期化されたオブジェクトグラフのメソッド呼び出しに渡します。 – Steven