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

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

如何對通用接口使用依賴注入?

如何對通用接口使用依賴注入?

C#
猛跑小豬 2023-09-16 17:33:41
如何對通用接口使用依賴注入?我想在DrawPresenter中創(chuàng)建IDrawView接口,它控制視圖。我不知道該用什么,Ninject 還是其他東西。我正在使用 WinForms。選擇哪個(gè)更好?class Program{    static void Main(string[] args)    {        IDrawPresenter prisenter = new DrawPresenter(new DrawWindow());        prisenter.Show();        Console.ReadLine();    }}public interface IView{    void Show();}public interface IDrawView : IView{    object GetGridDraw { get; }}public interface IPrisenter<TView> where TView : IView{    void Show();}public interface IDrawPresenter : IPrisenter<IDrawView>{    object SelectedDraws { get; }}public class DrawWindow : IDrawView{    public object GetGridDraw => 1;    public void Show()    {        Console.WriteLine("Show Window");    }}public abstract class BasePresenter<TView> : IPrisenter<TView>where TView : IView{    protected BasePresenter(TView view)    {        View = view;    }    protected TView View { get; private set; }    public void Show()    {        View.Show();    }}public class DrawPresenter : BasePresenter<IDrawView>, IDrawPresenter{    public DrawPresenter(IDrawView view): base(view)    {    }    public object SelectedDraws => View.GetGridDraw;}DI可以實(shí)現(xiàn)嗎?IDrawPresenter prisenter = new DrawPresenter();       public DrawPresenter()    {    }我需要為 Presenter 做些什么來管理表單。這就是我想要得到的。但這不起作用......public class NinjectProgram{    //Gets the inject kernal for the program.    public static IKernel Kernel { get; protected set; }}public class DependencyModule : NinjectModule{    public override void Load()    {        Bind<IDrawView>().To<DrawWindow>();    }}    static void Main(string[] args)    {        StandardKernel Kernel = new StandardKernel();        Kernel.Load(new DependencyModule());        IDrawPresenter prisenter = new DrawPresenter();        prisenter.Show();        Console.ReadLine();    }
查看完整描述

2 回答

?
蝴蝶刀刀

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

謝謝大家,這就是我想做的。也許這會(huì)對將來的某人有所幫助。


        static void Main(string[] args)

        {

            CompositionRoot.Wire(new DependencyModule());


            IDrawPresenter prisenter = new DrawPresenter();//kernel.Get<IDrawPresenter>();

            prisenter.Show();

            Console.ReadLine();

        }


    public class CompositionRoot

    {

        private static IKernel _ninjectKernel;


        public static void Wire(INinjectModule module)

        {

            _ninjectKernel = new StandardKernel(module);

        }


        public static T Resolve<T>()

        {

            return _ninjectKernel.Get<T>();

        }

    }


    public class DependencyModule : NinjectModule

    {

        public override void Load()

        {

            Bind<IDrawView>().To<DrawWindow>();

        }

    }


    public abstract class BasePresenter<TView> : IPrisenter<TView>

    where TView : IView

    {

        protected BasePresenter()

        {

            View = CompositionRoot.Resolve<TView>();//NinjectProgram.Kernel.Get<TView>();

        }

        protected TView View { get; private set; }

}


查看完整回答
反對 回復(fù) 2023-09-16
?
鳳凰求蠱

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

還將 Presenter 包含在容器中并解析它。


public class DependencyModule : NinjectModule {

    public override void Load() {

        Bind<IDrawView>().To<DrawWindow>();

        Bind<IDrawPresenter>().To<DrawPresenter>();

    }

}

它的所有依賴項(xiàng)(如果已注冊)也將被解析并注入到演示者中


static void Main(string[] args) {

    var kernel = new StandardKernel();

    kernel.Load(new DependencyModule());


    IDrawPresenter presenter= kernel.Get<IDrawPresenter>();

    presenter.Show();

    Console.ReadLine();

}

以上是基于


public abstract class BasePresenter<TView> : IPrisenter<TView> where TView : IView {

    protected BasePresenter(TView view) {

        View = view;

    }

    protected TView View { get; private set; }

    public void Show() {

        View.Show();

    }

}


public class DrawPresenter : BasePresenter<IDrawView>, IDrawPresenter {

    public DrawPresenter(IDrawView view): base(view) {

    }

    public object SelectedDraws => View.GetGridDraw;

}


查看完整回答
反對 回復(fù) 2023-09-16
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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