2017-10-17 63 views
1

我正在使用一些舊的asp.net網頁形式頁面,並試圖讓DI工作,但遇到了一些問題,一些對象沒有被創建,所以我的目的是在後面的代碼中執行一個懶惰的實現。SimpleInjector惰性通用註冊

我有以下登記在該網站的其他工作:

container.Register(typeof(IDataFactory<,>), new[] { typeof(SqlAccountFactory).Assembly }); 

爲了讓懶方面我都試過

container.Register<Lazy<IDataFactory<SqlAccountFactory, int>>>(
      () => new Lazy<IDataFactory<SqlAccountFactory, int>>(
       container.GetInstance<IDataFactory<SqlAccountFactory, int>>)); 

這樣做的結果是,該屬性沒有得到填充。

屬性,代碼頁的背後(高於此描述不使用懶惰時有效):

[Dependency] 
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository; 

僅供參考我使用的代碼的文檔來填充代碼屁股屬性標記屬性和所有的作品都很好,禁止上面的懶註冊。

是否有人能夠幫助或發現我做過的傻事?

回答

1

簡單噴油器的IPropertySelectionBehavior只適用於屬性。你所定義的是公共領域,而不是財產。如下

[Dependency] 
public Lazy<IDataFactory<SqlAccountFactory, int>> ProjectCodesRepository { get; set; } 

這是明智的,以紀念您DependencyAttribute以這樣一種方式,它僅支持特性,通過與AttributeUsageAttribute標記它:如果您將其更改爲以下,它可能會開始工作

[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)] 
public sealed class DependencyAttribute : Attribute { } 

這確保瞭如果將屬性放在字段上,C#編譯器將顯示編譯錯誤。長話短說,它與懶惰依賴沒有任何關係。

+0

解決了我的問題,我糾正了試圖修復註冊的財產。添加AttributeUsage將會在將來阻止它;謝謝! –

+0

請注意,依賴關係通常是一個糟糕的主意,因爲它是'懶惰的'。對象的創建應該非常快,因爲ctors不應該只是存儲它們的依賴關係。 – Steven