您好我的问题可能有点愚蠢,但如果有人帮我,我将非常感激。
所以我的问题是:如何使用ninject将自动类设置为与规则I+"Class" = "Class"
的接口比较?
让我们假设我们在一个项目中有很多类类,它是接口。
Class class1 : Iclass1{..}
Class class2 : Iclass2{..}
Class class3 : Iclass3{..}
和马马虎虎......有一百个班级和它的接口。
为每个类绑定规则编写是非常烦人的,我知道应该有一种自动方式来绑定它,就像在Castle Windsor中一样。
Thx,很多。我是Ninject的新人。
如果有人提供示例,请特别注意。
答案 0 :(得分: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);
}
但很容易,您可以根据惯例更改过滤类型的方式。
答案 1 :(得分:2)
你可以使用Ninject.Extensions.Conventions - 它有一个默认的绑定器,可以将所有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>();
}
}
}