IOCからインスタンス化されたクラスのリスト<T>を返す

私はIOCコンテナの使用を検討していますが、従来のコードで作業しています。どこにでも CreateInstance のロードがあり、そのクラスで完了したことがあります。

Is there a way I can get a IOC container to return a list of classes it has instantiated so the methods currently in use can continue doing their thing just without the CreateInstance

For example Autofac will scan an assembly/set of assemblies with code similar to the below, I was just wondering if it can return a List of the classes it has created.

var dataAccess = Assembly.GetExecutingAssembly();

builder.RegisterAssemblyTypes(dataAccess)
    .Where(t => t.Name.EndsWith("Repository"))
    .AsImplementedInterfaces();

UPDATE: I'm just deciding on which IOC to use but need the above functionality to tell me at what classes have been instantiated.

0
わかりません。既にIOCがあり、実行時にインスタンス化されたことを知りたい場合や、既存の実装をIOCに置き換える場合は、いくつかのサンプルコードを提供できますか?
追加された 著者 Myles McDonnell,
いくつかのコードを投稿していただけますか?
追加された 著者 Massimiliano Peluso,

2 答え

One of the tags says u are using Autofac. So i believe that u have access to the IContainer. Autofac tracks the instances of every object it creates. Look at the scope it has. For more information read the documentation http://code.google.com/p/autofac/wiki/OwnedInstances

私はAutofacについての良いブログを見つけました、多分あなたはLifeTimeScopesなどを理解するためにそれについて読むことができます http://nblumhardt.com/2011/01/an-autofac-lifetime-プライマー/

1
追加された

あなたは何かを意味する

var classes = _container.Resolve>().ToList();

上記の構文は、 YourClassType を派生するすべてのクラスがそのクラスとして登録されている限り機能します。

_container.Resolve>() tells autofac to resolve all classes that implement T.

0
追加された
Tは基本型ですか? 1つのクラスを継承するクラスがたくさんある場合、基本クラスを指定できますか?
追加された 著者 Jon,