簡體   English   中英

不要將dll文件加載到Ninject內核

[英]Dont load dll files to Ninject Kernel

我在Mvc App中使用Ninject For DIP,並且使用它,但是我想使用以下代碼將一些dll文件加載到ReportController的Ninject內核中:

    private readonly IKernel _kernel;
    public ReportController(IKernel kernel)
    {
        _kernel = kernel;
    }

    public ActionResult Index()
    { 
     var directoryInfo = new DirectoryInfo(@"D:\Project\ReportDlls");
     var modules = directoryInfo.GetFiles("*.dll");
       foreach (var m in modules)
        {
            var assembly = Assembly.LoadFile(m.FullName);
            _kernel.Load(assembly);
        }

我用下面的代碼從內核中讀取內容,但返回空的routeProviders。...為什么?

       var routesProviders = _kernel.GetAll<IReport>();
            foreach (var rp in routesProviders)
            {
                if (rp.GetType().Name == "DailyResult")
                {
                    var f = rp.GetType();
                }
            }

我的接口是IReport,我的Dll衍生自IReport,在dll中的Kernel.Bind<IReport>().To<DailyResult>();類中,我寫了Kernel.Bind<IReport>().To<DailyResult>(); 但是它不起作用.... ???

IKernel擴展的方法Load() ,在傳遞的程序集中搜索公共的INinjectModule,並調用具體的Load()方法,因此,您必須在傳遞了使綁定Kernel.Bind<IReport>().To<DailyResult>();任何程序Kernel.Bind<IReport>().To<DailyResult>(); 加載方法中。 參見參考: https : //github.com/ninject/Ninject/wiki/Modules-and-the-Kernel

或者你可以做這樣的事情

 var types= typeof(SomeClassInTheAssembly).Assembly;
        kernel.Bind(syntax => syntax.From(types)
            .SelectAllClasses()
            .BindDefaultInterface()
            .Configure(config => config.InRequestScope()));

代替_kernel.Load(assembly);

希望有用X)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM