1

ソリューションには、ユーザーのさまざまな状態に基づいてシステム内のリダイレクトを処理するコンポーネントがあります。これらのコンポーネントは、抽象型RedirectActionに基づいており、その役割を果たしています。

システムに、サービスと機能が機能しているかアクティブであるかを監視するために使用される別のインターフェイスがあります。IStatusCheckと呼ばれます。

        container.Register(
            AllTypes.FromThisAssembly()
                .BasedOn<IStatusCheck>()
                .WithServiceBase()
                .LifestyleTransient());

        container.Register(
            AllTypes.FromThisAssembly()
                .BasedOn<RedirectAction>()
                .WithServiceBase()
                .LifestyleTransient());

これは、RedirectActionにIStatusCheckを実装させて、それらの監視を有効にするまではうまく機能します。また、両方でコンポーネントを取得するための登録方法がわかりません。

ResolveAll<RedirectAction>()
ResolveAll<IStatusCheck>()

お願い助けて。

編集:

より完全な例

class Program
{
    static void Main(string[] args)
    {
        var container = new WindsorContainer();

        container.Register(
            AllTypes.FromThisAssembly()
                .BasedOn<IGenericInterface>()
                .WithServiceBase()
                .AllowMultipleMatches());

        Debug.Assert(container.ResolveAll<IGenericInterface>().Count() == 2, "Could not find all IGenericInterface types");

        container.Register(
            AllTypes.FromThisAssembly()
                .BasedOn<SpecificAbstractBase>()
                .WithServices(typeof(SpecificAbstractBase))
                .AllowMultipleMatches());

        var specific = container.ResolveAll<IGenericInterface>().First() as SpecificAbstractBase;

        Debug.Assert(specific != null, "Instance was not of expected type");
        Debug.Assert(container.ResolveAll<IGenericInterface>().Count() == 2, "Could not find all IGenericInterface types");
        Debug.Assert(container.ResolveAll<SpecificAbstractBase>().Count() == 2, "Could not find all SpecificAbstractBase types");
    }
}

public interface IGenericInterface
{
    bool ImAlive { get; }
}

public abstract class SpecificAbstractBase : IGenericInterface
{
    public abstract void DoTheJob();

    public bool ImAlive
    {
        get { return true; }
    }
}

public class SpecificOne : SpecificAbstractBase
{
    public override void DoTheJob() { }
}

public class SpecificTwo : SpecificAbstractBase
{
    public override void DoTheJob() { }
}
4

1 に答える 1

0

タイプを複数のコンポーネントに使用.AllowMultipleMatches()できるようにするために使用します。

于 2012-05-29T08:08:06.840 に答える