我在我的WCF服务中使用Autofac作为我的IoC.我有一种情况,我想将一个对象传递给嵌套类型(即一种未直接解析的类型,但在解析另一种类型时).据我所知,将此对象作为构造函数参数传递是Autofac中的首选方法.以下是这种情况的一个例子.
嵌套类型:
public class EventLogger<T> : IEventLogger<T>
{
public EventLogger(IRepository<T> repository, User currentUser) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我实际上试图解决的类型:
public class SomeBusinessObject
{
public SomeBusinessObject(IEventLogger<SomeLogEventType> logger, ...) { ... }
}
Run Code Online (Sandbox Code Playgroud)
注册:
var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(EventLogger<>)).As(typeof(IEventLogger<>));
builder.RegisterType<SomeBusinessObject>();
Run Code Online (Sandbox Code Playgroud)
解析我的WCF服务操作:
var currentUser = GetUserFromServiceContext();
var bo = lifetimeScope.Resolve<SomeBusinessObject>();
Run Code Online (Sandbox Code Playgroud)
我应该如何以及在何处将当前用户传递给我的记录器?我是否应该假设WCF操作必须知道解析SomeBusinessObject需要首先解析IEventLogger并在解析SomeBusinessObject时传递已解析的实例?这样的事情(原谅我,如果这不起作用,这只是一个想法):
var currentUser = GetUserFromServiceContext();
var logger = lifetimeScope.Resolve<IEventLogger<SomeLogEventType>>(new NamedParameter("currentUser", currentUser));
var bo = lifetimeScope.Resolve<SomeBusinessObject>(new NamedParameter("logger", logger));
Run Code Online (Sandbox Code Playgroud)
如果这是解决方案,如果类型嵌套得更深,会发生什么?难道这至少打败了依赖注入的一些目的吗?
我最近重构了MVVM应用程序以使用ReactiveUI。基本上,我已经更改了ViewModels中的许多代码以使用ReactiveLists,派生列表和ObservableAsPropertyHelpers。完成后,我注意到该应用程序的内存使用量从100MB增加到550MB(在完全相同的情况下,具有相同的数据和功能)。
我有来自同一个类的大量对象(约3000个),并且使用VS的诊断工具,我注意到该类的OAPH(它们有5个)占用了大量内存。最初,我假设线程问题,所以我决定尝试在测试应用程序中重现该问题。
为此,我创建了一个ViewModel:
public class ItemViewModel : ReactiveObject
{
private ObservableAsPropertyHelper<bool> myVar1;
public bool MyProperty1
{
get { return myVar1.Value; }
}
public ItemViewModel()
{
myVar1 = Observable.Return(false).ToProperty(this, x => x.MyProperty1);
}
}
Run Code Online (Sandbox Code Playgroud)
为了简便起见,我删除了另外三个完全相同的OAPH。
我的主要ViewModel如下所示:
public class MainViewModel : ReactiveObject
{
public IReactiveList<ItemViewModel> Items { get; private set; }
public MainViewModel()
{
var items = new List<ItemViewModel>();
for (int i = 0; i < 3000; i++)
{
items.Add(new ItemViewModel());
}
Items = new ReactiveList<ItemViewModel>(items);
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个HTML表格,对于小屏幕来说太宽了.我试图摆脱这个表,并使用列表和div来设置更具响应性.
这是我提出的HTML:
<ul>
<li class="fixture">
<div class="fixture-date">01/09/2014 20:00</div>
<div class="fixture-details">
<div class="home-team">Team A</div>
<div class="result">Result</div>
<div class="away-team">Team B</div>
</div>
<ul class="forecasts">
<li class="player-forecast">
<div class="player">Player 1</div>
<div class="forecast">Forecast</div>
<div class="score">3.0</div>
</li>
...
</ul>
</li>
...
</ul>
Run Code Online (Sandbox Code Playgroud)
我希望它在小屏幕上看起来像这样:
----------------------------------------------------
| 01/09/2014 |
|----------------------------------------------------|
| Team A | Result | Team B |
|----------------------------------------------------|
| Player 1 | Forecast | 3.0 |
|----------------------------------------------------|
| Player 2 | Forecast | 0.0 |
Run Code Online (Sandbox Code Playgroud)
在宽屏幕上像这样:
| Player 1 | Player 2 |
------------------------------------------------------------------------------------|
| 01/09/2014 …Run Code Online (Sandbox Code Playgroud)