为了账号安全,请及时绑定邮箱和手机立即绑定

在Simple注入器中注册Decorator,通用接口

在Simple注入器中注册Decorator,通用接口

C#
HUWWW 2023-07-23 16:49:58
我对使用装饰器简单注入器的 IoC 有问题。如何在 Ioc Simple 注入器中注册它?var data = new Data();var test = new Data2Decorator (data,    new Data1Decorator(data, new XxxData(data)))我这样尝试过。_container.Register<Ixxx1>();_container.Register<Ixxx2>();_container.Register<Ixxx, Data>();_container.Register<IData, XxxData>();container.RegisterDecorator<IData, Data1Decorator>();_container.RegisterDecorator<IData, Data2Decorator>():          public interface Ixxx1{    public IEnumerable<...> x1 { get; set; }}public class Data1Decorator : DataDecorator{    public readonly Ixxx1 _xxx1;     public Data1Decorator(Ixxx1 xxx1, IData data) : base(data)    {        _xxx1 = xxx1;    }    public override Task Load()    {        return Task.WhenAll(new List<Task>() { ..., base.Load() })        .ContinueWith((b) =>        {                _xxx1.x1 = ...        });    }}常用存储数据public interface Ixxx :    Ixxx1,    Ixxx2{}public class Data: Ixxx{     public IEnumerable<...> x1 { get; set; }    public IEnumerable<...> x2 { get; set; }}
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

container.Register<Ixxx, Data>();

_container.Register<IData<Ixxx>, XxxData>();

_container.RegisterDecorator<IData<Ixxx>, Data1Decorator<Ixxx>>();

_container.RegisterDecorator<IData<Ixxx>, Data2Decorator<Ixxx>>():

    public interface IData<out TData>

    {

        TData Data { get; }

        Task Load();

    }


    public abstract class DataDecorator<TData> : IData<TData>

    {

        public readonly IData<TData> _data;


        public TData Data => _data.Data;


        protected DataDecorator(IData<TData> data) => _data = data;


        public virtual Task Load() => _data.Load();

    }

    public interface Ixxx :

        Ixxx1,

        Ixxx2

    {


    }


    public class XxxData : IData<Ixxx>

    {

        public Ixxx Data { get; }


        public XxxData(Ixxx data) => Data = data;


        public Task Load() => Task.Run(() => { });

    }

    public interface Ixxx1

    {

        public IEnumerable<...> x1 { get; set; }

    }


    public class Data1Decorator<TData> : DataDecorator<TData>

        where TData : Ixxx1

    {


        public Data1Decorator(IData data) : base(data)

        {

        }


        public override Task Load()

        {

            return Task.WhenAll(new List<Task>() { ..., base.Load() })

            .ContinueWith((b) =>

            { 

                   Data.x1 = ...

            });

        }

    }


查看完整回答
反对 回复 2023-07-23
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信