建立对象比较规则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” = 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>();
}
}
}