我一直在慢慢地教自己接口驱动编程的基础知识,而且我正在努力让我对Ninject专门针对控制反转的一些原则有所了解。
假设我有一个具体的模型类如下......
public sealed class Host : EntityAuditable<Host, Guid>
我有一个基类,它定义了像这样的模型的方法....
public abstract class EntityAuditable<T, TKey> :
IEntity,
IDisposable,
IComparable<EntityAuditable<T, TKey>>
where T : EntityAuditable<T, TKey>, new()
IEntity是一个非常简单的界面,它定义了一个对象属性'Id'。
现在我的Host类的构造函数如下....
public Host(IService<Host> service)
{
this.service = service;
this.id = Guid.NewGuid();
}
IService实现提供了将对象持久保存到特定于服务的存储库的方法。
我想要做的是在我的基类中提供一些静态方法,以便我可以编写像
这样的代码Host.LoadAll();
并知道我的绑定将被正确注入。我在基类中的实现与此类似......
public static IList<T> LoadAll()
{
T instance = new T();
List<T> instances = new List<T>(instance.DataSelectAll());
// Clean up the instance.
instance.Dispose();
return instances;
}
这是可能还是我做了一些根本错误的事情?
当我调用new T()时,Ninject是否知道它应该调用我的参数化构造函数?
我在文档中找到的示例(遗憾地过时)使用内核来创建对象,但我不希望在我的模型中创建内核创建代码。
我将在Global.ascx文件中执行所有绑定。
答案 0 :(得分:1)
在回答我自己的问题时,事实证明我的方法不正确。
剥离静态方法并将我的mvc控制器用于业务逻辑导致更好的分离和更清晰,更易于维护的代码。用ninject绑定所有内容要容易得多。