1
私はLazyオブジェクトを作成するために、DryIocを使用できる必要があります。怠惰な<T>とDryIoc、私はそれを正しくやっていますか?
私はGodオブジェクトを使用し、complexe KeyPair<string, SomeAbstractType>
の重い辞書に依存しているため、各値をLazy<SomeAbstractType>
と置き換え、アプリケーションの読み込み速度を向上させたいと考えています。
私はこのようにPOCOをやったことがありますが、私はDryIocをマスターすることにはほど遠いので、私はそれを過ぎたかもしれません。
ここにコードを読んでください。
using System;
using System.Diagnostics;
using DryIoc;
namespace ConsoleApplication2
{
public class Program
{
public class Postoned
{
private readonly IContainer _container;
public Postoned(IContainer container)
{
_container = container;
}
public Lazy<T> Create<T>()
{
return new Lazy<T>(() =>
{
Debugger.Break();
return _container.Resolve<T>();
});
}
}
public class Holder
{
public Lazy<int> Li { get; set; }
public Lazy<string> Ls { get; set; }
public Holder(Lazy<int> li, Lazy<string> ls)
{
Li = li;
Ls = ls;
}
}
static void Main(string[] args)
{
var c = new Container();
c.RegisterInstance(c);
c.RegisterMapping<IContainer, Container>();
c.RegisterInstance(66, Reuse.Singleton);
c.RegisterInstance("string 66", Reuse.Singleton);
c.Register(Made.Of(() => new Postoned(Arg.Of<IContainer>())), Reuse.Singleton);
c.Register(Made.Of(r => ServiceInfo.Of<Postoned>(), (Postoned postoned) => postoned.Create<int>()), Reuse.Singleton);
c.Register(Made.Of(r => ServiceInfo.Of<Postoned>(), (Postoned postoned) => postoned.Create<string>()), Reuse.Singleton);
c.Register(Made.Of(() => new Holder(Arg.Of<Lazy<int>>(), Arg.Of<Lazy<string>>())), Reuse.Singleton);
var holder = c.Resolve<Holder>();
Debugger.Break();
var li = holder.Li;
Debugger.Break();
var i = li.Value;
Console.WriteLine(i);
Console.WriteLine(holder.Ls.Value);
Console.ReadLine();
}
}
}
EDIT [答え]:
それは仕方simplier道のXDを達成することができます。
using System;
using System.Diagnostics;
using DryIoc;
namespace ConsoleApplication2
{
public class Program
{
public class Holder
{
public Lazy<int> Li { get; set; }
public Lazy<string> Ls { get; set; }
public Holder(Lazy<int> li, Lazy<string> ls)
{
Li = li;
Ls = ls;
}
}
static void Main(string[] args)
{
var c = new Container();
c.RegisterInstance(c);
c.RegisterMapping<IContainer, Container>();
c.RegisterInstance(66, Reuse.Singleton);
c.RegisterInstance("string 66", Reuse.Singleton);
c.Register(Made.Of(() => new Holder(Arg.Of<Lazy<int>>(), Arg.Of<Lazy<string>>())), Reuse.Singleton);
var holder = c.Resolve<Holder>();
Debugger.Break();
var li = holder.Li;
Debugger.Break();
var i = li.Value;
Console.WriteLine(i);
Console.WriteLine(holder.Ls.Value);
Console.ReadLine();
}
}
}
ありがとうございます。私が言ったように、私はそれをやりすぎたように感じた;) –