建立对象比较规则I+”;Somevalue“=有点价值

本文关键字:Somevalue 比较规则 对象 建立 | 更新日期: 2023-09-27 17:59:45

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

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

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

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

一般。。。有一百个类和它的接口。

为每个类绑定规则编写是一件很麻烦的事,我知道应该有一种自动的方法来绑定它,就像在温莎城堡一样。

太多了。我对Ninject很陌生。

如果有人愿意提供一个例子,请特别说明。

建立对象比较规则I+”;Somevalue“=有点价值

您不需要使用以下规则进行映射:

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);
}

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

您可以使用Ninject。扩展。约定-它有一个默认的绑定器,将所有IFoo绑定到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>();
        }
    }
}