0

我想用 MVP 模式实现 CastleWindsor,但是当调用存储库以获取一些数据时,我不断收到“对象引用未设置为 Presenter 上的对象引用”。

我就是这样做的,我想知道是否有什么问题,所以如果可以的话,请告诉我:

主持人:

public class CategoryPresenter
{
    ICategoryRepository categoryRepository;
    ICategoryView categoryView;

    public CategoryPresenter(ICategoryView _categoryView, ICategoryRepository _categoryRepository)
    {
        categoryView = _categoryView;
        categoryRepository = _categoryRepository;
    }

    //public CategoryPresenter(ICategoryView _categoryView) : this (_categoryView, new CategoryRepository())
    //{ }

    public CategoryPresenter(ICategoryView _view)
    {
        categoryView = _view;
    }

    public IEnumerable<object> GetActiveCategories()
    {
      return  categoryRepository.GetActiveCategories();
    }
}

国际奥委会类:

public  static class IoC
{
    public static IWindsorContainer windsorContainter { get; set; }
}

IoCConfig 类:

类 IoCConfig {

    public static IWindsorContainer RegisterCastleWindsorContainer()
    {
        IWindsorContainer windsorContainer = new WindsorContainer()
        .Install(new RepositoryInstaller())

        IoC.windsorContainter = windsorContainer;

        return windsorContainer;
    }

}

安装类:

public class RepositoryInstaller: IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Component.For<ICategoryRepository>().ImplementedBy<CategoryRepository>).LifestyleTransient());

    }
}

最后在 Global.ascx 文件中,我在 App_Start 执行此操作:

    void Application_Start(object sender, EventArgs e)
    {            
        // Code that runs on application startup
        IoCConfig.RegisterCastleWindsorContainer();
    }

有了这个,错误信息如上所述;错误发生在演示者的方法:GetActiveCategories();

正如您在代码中看不到的那样,我在容器上调用了 resolve 方法。

如果您有任何建议,请告诉我。

谢谢你。

4

1 回答 1

0

我已经解决了这个问题到IoC 类

    public static T Resolve<T>()
    {
        try
        {
            return windsorContainer.Resolve<T>();
        }
        catch (Exception e)
        {
            throw e;
        }
    }

然后将其添加到演示者:

   ICategoryRepository categoryRepository = IoC.Resolve<ICategoryRepository>();
   ICategoryView categoryView = IoC.Resolve<ICategoryView>();
于 2013-08-30T14:45:01.477 回答