2017-10-17 11 views
1

私はいくつかの古いasp.net Webフォームページで作業していますが、DIを動作させようとしていますが、作成されていないオブジェクトの問題が発生しています。 。SimpleInjector遅延ジェネリック登録

私は、ウェブサイトの残りの部分で作業し、次の登録があります。私はこれの結果は、プロパティが取得していないということです

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

を試してみましたが、怠惰な側面を取得するには

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

を人口が多い。

ページの背後にあるコードの物件(このレイジーを使用していないときに動作上述したように):私は属性でマークされたコード尻のプロパティを設定するためにドキュメントからのコードを使用しています参考

[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

依存関係が 'Lazy 'であることは一般的には悪い考えです。 ctorsは依存関係を保存するだけで済むので、オブジェクトの作成は非常に高速です。 – Steven

関連する問題