我有两个带有接口AlbumRepository的存储库IAlbumRepository和带有接口CachedAlbumRepositoryIAlbumRepository(具有构造函数接口IAlbumRepository)。我需要使用Ncc的ICachedAlbumRepositoryCachedAlbumRepository的构造器进行注入。

如何用Ninject实现它?

与结构图相同的方法

x.For<IAlbumRepository>().Use<CachedAlbumRepository>()

.Ctor<IAlbumRepository>().Is<EfAlbumRepository>();

    public class CachedAlbumRepository : IAlbumRepository
    {
        private readonly IAlbumRepository _albumRepository;

        public CachedAlbumRepository(IAlbumRepository albumRepository)
        {
            _albumRepository = albumRepository;
        }

        private static readonly object CacheLockObject = new object();

        public IEnumerable<Album> GetTopSellingAlbums(int count)
        {
            string cacheKey = "TopSellingAlbums-" + count;

            var result = HttpRuntime.Cache[cacheKey] as List<Album>;

            if (result == null)
            {
                lock (CacheLockObject)
                {
                    result = HttpRuntime.Cache[cacheKey] as List<Album>;

                    if (result == null)
                    {
                        result = _albumRepository.GetTopSellingAlbums(count).ToList();

                        HttpRuntime.Cache.Insert(cacheKey, result, null,

                            DateTime.Now.AddSeconds(60), TimeSpan.Zero);
                    }
                }
            }

            return result;
        }
    }

最佳答案

您需要创建2个绑定-一个绑定将CachedAlbumRepository注入需要IAlbumRepository的任何对象,另一个绑定将一个普通AlbumRepository注入CachedAlbumRepository。这些绑定应该这样做:

Bind<IAlbumRepository>()
    .To<CachedAlbumRepository>();

Bind<IAlbumRepository>()
    .To<AlbumRepository>()
    .WhenInjectedInto<CachedAlbumRepository>();

09-25 19:12