誰かが問題を解決するのを手伝ってくれませんか。
2 つのコンストラクターと依存関係を持つクラス SeviceImpl のインスタンスを追加しようとしています。
以下は私が得るものです。
- バリアント A では、ユニティは依存関係を注入しません。そうなると思いました。
バリアント BI では、オブジェクトが既に存在するときに BuildUp() メソッドがコンストラクターをチェックする必要がある理由がわかりませんか? 依存関係を注入できないのはなぜですか?
public interface IService { void Run(); } public class Database { } public class ServiceImpl : IService { public ServiceImpl(int i) {} public ServiceImpl(bool b) { } [Dependency] public Database Db { get; set; } public void Run() {} } public static void Main() { using (var unity = new UnityContainer()) { unity.RegisterInstance<Database>(new Database()); // Now I want to register an instance of ServiceImpl // Variant A unity.RegisterInstance<IService>(new ServiceImpl(3)); var srv = unity.Resolve<IService>(); // srv.Db is null which is bad unity.BuildUp(srv); // Doesn't throw an exception // srv.Db is still null // Variant B var srv = new ServiceImpl(3); // Hoping this call will inject Database unity.BuildUp(srv); // Now it does: InvalidOperationException - The type ServiceImpl has multiple constructors of length 1. Unable to disambiguate. unity.RegisterInstance<IService>(srv); } }