在第一種情況下,您註冊了類型的實例。 所以,這個實例的字段和屬性都被修改了,直到你註冊了他,因爲這個,你可以註冊一些單身的「狀態」。 Hovewer,你需要註冊單例狀態是一個非常奇怪的行爲。
在第二種情況下,您註冊了類型,但未註冊某些對象狀態。當然,您可以使用特定的屬性或注入參數來設置新實例的狀態。
IUnityContainer.RegisterInstance使用ContainerControlledLifetimeManager默認情況下,如果不指定其他,見Lifetime Managers。你的兩個案例是相同的。 Hovewer,兩種情況下都不會註冊一個單例。 我的意思是你可以爲IConfiguration註冊多個不同的對象:
IConfiguration globalConfig = new Configuration();
IConfiguration localConfig = new Configuration();
container.RegisterInstance<IConfiguration>("globalConfig", globalConfig);
container.RegisterInstance<IConfiguration>("localConfig", localConfig);
...
container.RegisterType<IConfiguration, Configuration>("localConfig", new ContainerControlledLifetimeManager());
container.RegisterType<IConfiguration, Configuration>("globalConfig", new ContainerControlledLifetimeManager());
,你會得到不等於不匹配的registerName對象,但獲得等於對象爲同一registerName:
// This objects does not equal in both cases
IConfiguration globalConfig = container.Resolve<IConfiguration>("globalConfig");
IConfiguration localConfig = container.Resolve<IConfiguration>("localConfig");
....
// This objects equals in both cases
IConfiguration globalConfig1 = container.Resolve<IConfiguration>("globalConfig");
IConfiguration globalConfig2 = container.Resolve<IConfiguration>("globalConfig");
我希望它對你有所幫助。
這是一個很好的例子來解釋2個選項之間的區別 – Tony98