在Ninject中调用所有ISomething实例

Pau*_*aul 6 ninject ninject-2

我有一个接口ISomething与方法Start.我想得到这个接口的所有实现(在多个程序集中,主要的和所有引用的),并在应用程序启动时调用Start方法.我怎么能用Ninject 2.2.0.0 .NET 4.0做到这一点?

Autofac答案在这里 调用Autofac中的所有ISomething实例

the*_*ric 10

您可以尝试Ninject.Extensions.Conventions :

var kernel = new StandardKernel();
kernel.Bind(c =>
            c.FromThisAssembly()
                .SelectAllClasses().InheritedFrom<IFoo>()
                .BindAllInterfaces());

// and later:

kernel.GetAll<IFoo>().ToList().ForEach(foo => foo.DoSmth());
Run Code Online (Sandbox Code Playgroud)

需要的课程如下:

public interface IFoo
{
    void DoSmth();
}

public class Foo1 : IFoo
{
    public void DoSmth()
    {
        Console.Out.WriteLine("Foo1");
    }
}

public class Foo2 : IFoo
{
    public void DoSmth()
    {
        Console.Out.WriteLine("Foo2");
    }
}
Run Code Online (Sandbox Code Playgroud)


mka*_*kaj 0

您可以使用反射来查找实现接口的所有类:http://cocaine.co.nz/Home/High-On-Ninject-BLLModule

你所说的“主要的”是什么意思?- 调用哪一个上的 Start() 方法?