请提供基本的Ninject信息

时间:2010-09-11 19:16:46

标签: interface inversion-of-control ninject

我一直在慢慢地教自己接口驱动编程的基础知识,而且我正在努力让我对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文件中执行所有绑定。

1 个答案:

答案 0 :(得分:1)

在回答我自己的问题时,事实证明我的方法不正确。

剥离静态方法并将我的mvc控制器用于业务逻辑导致更好的分离和更清晰,更易于维护的代码。用ninject绑定所有内容要容易得多。