第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我如何為 Ninject 提供額外的參數(shù)?

我如何為 Ninject 提供額外的參數(shù)?

C#
慕尼黑5688855 2022-11-22 15:46:05
我需要自動(dòng)解決我的 Windows 窗體的依賴關(guān)系。唯一的問題是我的表單構(gòu)造函數(shù)也需要一個(gè)整數(shù)值。請(qǐng)查看代碼部分中的實(shí)現(xiàn)。   //Ninject bindings   public class Bindings : NinjectModule    {        public override void Load()        {            Bind<ILogger>().To<LogToDB>();            Bind<ICopy>().To<CopyToFolder>();                    }    }  //WinForm - Form1   public partial class Form1 : Form    {        public readonly ILogger _processRepository;        public readonly Icopy _copy;        public readonly int ValueToEdit;        public Form1(int valueToEdit, ILogger logger, ICopy copy)        {            this._processRepository = logger;            this._copy = copy;            this.ValueToEdit = valueToEdit;            InitializeComponent();        }    }    //main    /// <summary>    /// The main entry point for the application.    /// </summary>    [STAThread]    static void Main()    {        IKernel kernel = new StandardKernel(new Bindings());                    Application.Run(kernel.Get<Form1>());                }我得到一個(gè)錯(cuò)誤:Ninject.ActivationException: 'Error activating int No matching bindings are available, and the type is not self-bindable.如何自動(dòng)解析表單依賴關(guān)系并傳遞整數(shù)值?實(shí)際上,我使用了相同的表格來進(jìn)行添加和編輯,所以在編輯時(shí),應(yīng)該設(shè)置這個(gè)編輯值。
查看完整描述

2 回答

?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

我想解決這個(gè)問題最干凈的方法是創(chuàng)建一個(gè)工廠:


interface IForm1Factory

{

    Form1 Create(int valueToEdit);

}


class Form1Factory

{

    public readonly ILogger _processRepository;

    public readonly Icopy _copy;


    public Form1Factory(ILogger logger, ICopy copy)

    {

        this._processRepository = logger;

        this._copy = copy;

    }


    public Form1 Create(int valueToEdit)

    {

        return new Form1(valueToEdit, _processRepository, _copy);

    }

}

還有一個(gè)擴(kuò)展(Ninject.Extensions.Factory)允許您自動(dòng)生成工廠,例如Form1Factory基于接口的。如果您使用該擴(kuò)展名,則您聲明使用Bind<IForm1Factory>().ToFactory().


查看完整回答
反對(duì) 回復(fù) 2022-11-22
?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

using Ninject;

using Ninject.Modules;

using Ninject.Parameters;  

//Add new class  

public class CompositionRoot

{

    public static IKernel _ninjectKernel;

    public static void Wire(INinjectModule module)

    {

        _ninjectKernel = new StandardKernel(module);

    }

    public static T Resolve<T>()

    {

        return _ninjectKernel.Get<T>();

    }

    public static T ResolveWithArgument<T>(ConstructorArgument argument)

    {

        return _ninjectKernel.Get<T>(argument);

    }

}


//Ninject bindings

public class Bindings : NinjectModule

{

    public override void Load()

    {

        Bind<ILogger>().To<LogToDB>();

        Bind<ICopy>().To<CopyToFolder>();            

    }

}


//WinForm - Form1

public partial class Form1 : Form

{

    public readonly ILogger _processRepository;

    public readonly Icopy _copy;

    public readonly int ValueToEdit;

    public Form1(ILogger logger, ICopy copy, int valueToEdit)

    {

        this._processRepository = logger;

        this._copy = copy;

        this.ValueToEdit = valueToEdit;

        InitializeComponent();

    }

}


//main

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

   //Apply the binding rule first

   CompositionRoot.Wire(new Bindings());   

   //Then resolve your form dependencies this way using Ninject passing along the 

   constructor arguments. 

   CompositionRoot.ResolveWithArgument<Form1>(new ConstructorArgument("valueToEdit", 

   1)).ShowDialog();      

}


查看完整回答
反對(duì) 回復(fù) 2022-11-22
  • 2 回答
  • 0 關(guān)注
  • 120 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)