0

このコードは機能しません。私は基本的に、スーパーインターフェースとサブインターフェースのいくつかの実装を持っています。スーパー インターフェイスがすべての実装を返し、サブ インターフェイスがサブ実装のみを返すようにしたいと思います。サブ実装をサブ インターフェイスとスーパー インターフェイスの両方に明示的にバインドしたくありません。それをサブインターフェイスにバインドし、どういうわけかサブをスーパーにバインドしたいと思います。次のように設定しようとしていますが、うまくいきません。

class Program
{
    static void Main(string[] args)
    {
        IKernel kernel = new StandardKernel();
        kernel.Bind<ISuperInterface>().To<ISubInterface>(); // What can I do instead of this?
        kernel.Bind<ISuperInterface>().To<SuperImplementation>();
        kernel.Bind<ISubInterface>().To<SubImplementation>();

        var subs = kernel.GetAll<ISubInterface>(); // I want this to return a SubImplementation
        var supers = kernel.GetAll<ISuperInterface>(); // I want this to return a SuperImplementation and a SubImplementation

        Console.WriteLine(subs.Count());
        Console.WriteLine(supers.Count());
    }
}

public class SubImplementation : ISubInterface
{
}

public class SuperImplementation : ISuperInterface
{
}

public interface ISuperInterface
{
}

public interface ISubInterface : ISuperInterface
{
}
4

1 に答える 1

0

Ninject はインターフェースの分離をサポートしています:

kernel.Bind<ISuperInterface>().To<SuperImplementation>();
kernel.Bind<ISuperInterface, ISubInterface>().To<SubImplementation>();

または、使用できる規則を使用している場合BindAlInterfaces

于 2012-11-03T07:11:51.737 に答える