0

型をバインドしてコレクションを解決する方法があるかどうか知りたかっただけです。Ninject がすぐにこれを実行できるかどうかはわかりません。私は Ninject3 で MVC4 を使用しているので、サービスを登録する NinjectWebCommon.cs があります。カーネルを入手できる場所がありません (他の場所からカーネルにアクセスするのは悪い習慣だと読んだことがありますが、それは確かにこれに対する解決策になる可能性があります)。

たとえば、私はこのクラスを持っています:

public class CacheManager
{
    public IEnumerable<SelectListItem> Get<T>() where T : INameValue

発信できるようになりたい

CacheManager.Get<City>

CityRepository クラスを取得します。

4

2 に答える 2

0

私はやった:

NinjectWebCommon.cs で:

        kernel.Bind(typeof(CacheManager))
            .ToSelf()
            .InSingletonScope();

        kernel.Bind<IDataListRepository<Locale>>()
            .To<LocaleRepository>();

CacheManager.cs で:

public class CacheManager: IDisposable
{
    private IKernel kernel;

    public CacheManager(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public IEnumerable<T> GetAsEnumerable<T>()
    {
        var rep = kernel.Get<IDataListRepository<T>>();
        return rep.GetAll();
    }

これが悪い習慣であるかどうかはわかりませんが (カーネルは理論的には初期化フェーズでのみ使用する必要があるため)、それを行う他の方法は見つかりませんでした。

より良いオプションが存在する場合は、お知らせください。

于 2013-12-24T16:21:38.240 に答える