每当我尝试将我的一个服务依赖项注入MVC控制器时,我收到以下错误:
激活IFeedService时出错没有匹配的绑定可用,并且该类型不可自我绑定。 激活路径:
2)将依赖关系IFeedService注入到FeedController类型的构造函数的参数svc中
1)请求FeedController
建议:
1)确保您已为IFeedService定义了绑定。
2)如果在模块中定义了绑定,请确保已将模块加载到内核中。
3)确保您没有意外创建多个内核。
4)如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。
5)如果使用自动模块加载,请确保搜索路径和过滤器正确无误。
=============================================== =======================
这是我的代码的样子:
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>();
}
public interface IEFRepository : IDisposable
{
void SetContext(IEntityObjectContext context);
IQueryable<T> GetAll<T>() where T : class;
}
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;
}
}
public interface IFeedService : IDisposable
{
IQueryable<FeedItem> GetPosts();
}
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);
}
}
}
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()
{
}
}
kernel.Bind<ITest>().To<Test>();