亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

C#
猛跑小豬 2023-09-16 17:33:41
如何對通用接口使用依賴注入?我想在DrawPresenter中創建IDrawView接口,它控制視圖。我不知道該用什么,Ninject 還是其他東西。我正在使用 WinForms。選擇哪個更好?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可以實現嗎?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貢獻1801條經驗 獲得超8個贊

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


        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; }

}


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

TA貢獻1825條經驗 獲得超4個贊

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


public class DependencyModule : NinjectModule {

    public override void Load() {

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

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

    }

}

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


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;

}


查看完整回答
反對 回復 2023-09-16
  • 2 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號