1

以下のコードの 2 行目から、型のリストを取得します。これを IBusinessObject のリストとして返したいと思います。これは可能ですか?もしそうなら、どうすればこれを行うことができますか?

public List<IBusinessObject> RetrieveAllBusinessObjects()
{
    var businessObjectType= typeof(IBusinessObject);

    List<Type> implementationsOfBusinessObject = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(s => s.GetTypes())
         .Where(businessObjectType.IsAssignableFrom).ToList();

    return ?;
}
4

1 に答える 1

1

ここでは、すべての型にデフォルトのコンストラクターがあることを前提とした可能な実装を示します。

public List<IBusinessObject> RetrieveAllBusinessObjects()
{
    var businessObjectType= typeof(IBusinessObject);

    List<Type> implementationsOfBusinessObject = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(s => s.GetTypes())
         .Where(businessObjectType.IsAssignableFrom).ToList();

    return implementationsOfBusinessObject.Select(t => (IBusinessObject)Activator.CreateInstance(t)).ToList();
}

また、型がクラスであり、抽象型でないかどうかを確認することをお勧めします。

通常、このようなシナリオに対処する場合は、すべての依存関係を解決できる依存性注入コンテナーを使用することをお勧めします。たとえば、Castle Windsor は、特定のインターフェイスを実装するすべてのインスタンスを解決するために使用できる型付きファクトリ機能です。http://docs.castleproject.org/Windsor.Typed-Factory-Facility-interface-based-factories.ashxhttp://docs.castleproject.org/Windsor.Resolvers.ashxを見てください。

于 2013-10-13T20:53:52.357 に答える