激活服务时出错 - Ninject

时间:2016-07-01 08:53:07

标签: asp.net-mvc-4 dependency-injection ninject c#-3.0

每当我尝试将我的一个服务依赖项注入MVC​​控制器时,我收到以下错误:

激活IFeedService时出错没有匹配的绑定可用,并且该类型不可自我绑定。 激活路径:

2)将依赖关系IFeedService注入到FeedController类型的构造函数的参数svc中

1)请求FeedController

建议:

1)确保您已为IFeedService定义了绑定。

2)如果在模块中定义了绑定,请确保已将模块加载到内核中。

3)确保您没有意外创建多个内核。

4)如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。

5)如果使用自动模块加载,请确保搜索路径和过滤器正确无误。

=============================================== =======================

这是我的代码的样子:

ObjectFactory.cs

private static void RegisterServices(IKernel kernel)
{
    // Contexts
    kernel.Bind<IEntityObjectContext>().To<Entities>();
    kernel.Bind<IAzureObjectContext>().To<AzureTableObjectContext>();

    // Repositories
    kernel.Bind<IEFRepository>().To<EFRepository>();
    kernel.Bind<IAzureRepository>().To<AzureRepository>();

    // Services
    kernel.Bind<IFeedService>().To<FeedService>();
}

IEFRepository.cs

public interface IEFRepository : IDisposable
{
    void SetContext(IEntityObjectContext context);
    IQueryable<T> GetAll<T>() where T : class;
}

EFRepository.cs

public class EFRepository : IEFRepository
{
    internal IEntityObjectContext context;
    private Dictionary<Type, object> objectSets;

    public EFRepository(IEntityObjectContext context)
    {
        this.context = context;
        objectSets = new Dictionary<Type, object>();
    }

    public void SetContext(IEntityObjectContext context)
    {
        this.context = context;
    }
}

IFeedService.cs

public interface IFeedService : IDisposable
{
    IQueryable<FeedItem> GetPosts();
}

FeedService.cs

public class FeedService : IFeedService
{
    private IEntityObjectContext _context;
    private readonly IEFRepository _repo;

    public FeedService(IEntityObjectContext context,
            IEFRepository repo)
    {
        _context = context;
        _repo = repo;
        _repo.SetContext(_context);
    }

    public IQueryable<FeedItem> GetPosts()
    {
        using (_repo)
       {
           return _repo.GetAll<FeedItem>().Take(10);
       }
    }
}

FeedController.cs

public class FeedController : Controller
{
    private readonly IFeedService _svc;

    public FeedController(IFeedService svc)
    {
        _svc = svc;
    }
}

正如您所看到的,在那里有一些嵌套的依赖项。但不确定,需要添加/删除此位才能正常工作。

注意:每当我请求Feed / FetchFeed路径时,都会抛出错误。我还尝试注释掉FeedService的构造函数部分,以查看嵌套依赖项是否会产生任何问题,但同样会抛出同样的错误。

编辑1:

ObjectFactory.cs的其余代码

class ObjectFactory
{
    static ObjectFactory()
    {
        RegisterServices(kernel);
    }
    static IKernel kernel = new StandardKernel();
    public static T GetInstance<T>()
    {
        return kernel.Get<T>();
    }
    private static void RegisterServices(IKernel kernel)
    {
        //...
    }
}

编辑2:

我甚至试图写一个相当基本的服务,但仍然是同样的错误。这是我尝试过的:

public interface ITest
{
    void CheckItOut();
}

public class Test : ITest
{
    public void CheckItOut()
    {
    }
}

ObjectFactory.cs

kernel.Bind<ITest>().To<Test>();

0 个答案:

没有答案