1

您好,我的问题可能有点愚蠢,但如果有人能帮助我,我将非常感激。

所以我的问题是:如何I+"Class" = "Class"使用ninject将自动类设置为与规则进行接口比较?

让我们想象一下,我们在一个项目中有很多类,它是接口。

Class class1 : Iclass1{..}
Class class2 : Iclass2{..}
Class class3 : Iclass3{..}

马马虎虎......有一百个类和它的接口。

为每个类绑定规则编写一个非常烦人的,我知道应该有一种自动的方式来绑定它,就像在温莎城堡中一样。

多谢。我是 Ninject 的新手。

如果有人会提供一个例子,特别感谢。

4

2 回答 2

2

您不需要映射规则:

I+“Somevalue” = Somevalue

相反,您可以使用反射来查找每个类的接口,下面的代码假设所有类型都在执行程序集并且您的类的名称以“Class”开头,方法很像:

var types = Assembly.GetExecutingAssembly().GetTypes()
                     .Where(t => t.Name.StartsWith("Class"));

foreach (var type in types)
{
    var interfaceType = type.GetInterfaces()
                            .Single();

    kernel.Bind(type).To(interfaceType);
}

但是很容易,您可以根据约定更改过滤类型的方式。

于 2013-02-18T08:26:36.963 回答
2

您可以使用Ninject.Extensions.ConventionsIFoo - 它具有将所有s绑定到 s 的默认绑定器Foo,当然您可以定义更强大的约定。

简单的例子:

using Ninject;
using Ninject.Extensions.Conventions;

namespace NinjectConventionsDemo
{
    public interface ITool { }
    public class Tool : ITool { }

    internal class Program
    {
        private static void Main()
        {
            IKernel kernel = new StandardKernel();
            kernel.Bind(convention => convention
                                          .FromThisAssembly()
                                          .SelectAllClasses()
                                          .BindAllInterfaces()
                );
            var tool = kernel.Get<ITool>();
        }
    }
}
于 2013-02-18T08:37:31.180 回答