这篇来自David Haydn的有用文章(编辑:删除了骗局链接,可能是本文)展示了如何使用InjectionConstructor该类来帮助您使用Unity的装饰器模式来设置链.但是,如果装饰器链中的项目在其构造函数中具有其他参数,则InjectionConstructor必须显式声明它们中的每一个(或者Unity将抱怨它找不到正确的构造函数).这意味着您不能简单地将新的构造函数参数添加到装饰器链中的项目,而无需更新Unity配置代码.
这里有一些示例代码来解释我的意思.所述ProductRepository类首先被缠绕CachingProductRepository,然后通过LoggingProductRepostiory.除了在构造函数中使用IProductRepository之外,CachingProductRepository和LoggingProductRepository都需要来自容器的其他接口.
public class Product
{
public int Id;
public string Name;
}
public interface IDatabaseConnection { }
public interface ICacheProvider
{
object GetFromCache(string key);
void AddToCache(string key, object value);
}
public interface ILogger
{
void Log(string message, params object[] args);
}
public interface IProductRepository
{
Product GetById(int id);
}
class ProductRepository : IProductRepository
{
public ProductRepository(IDatabaseConnection db)
{
}
public Product GetById(int id)
{
return new …Run Code Online (Sandbox Code Playgroud) 我的应用程序在几个不同的设备上同步数据.因此,它将所有日期存储在UTC时区中,以考虑可能设置为不同时区的不同设备.
麻烦的是,当我读回日期并显示它们时,它们似乎是不正确的(大多数用户都在英国夏令时,所以他们落后一小时).
<TextBlock Margin="5" Style="{StaticResource SmallTextblockStyle}">
<Run Text="Last Updated:" />
<Run Text="{Binding Path=Submitted}" />
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我是否需要手动覆盖UI线程的set CurrentCulture属性?我知道我必须在Silverlight中这样做.
我正在开发一个Windows 8运行时组件,因此公共接口不能包含,Task<T>因为它不是Windows运行时类型.
这意味着我不能标记的方法async,不能await在private async我的库方法.这导致了一些关于如何处理我的应用程序逻辑的混淆.
这就是我如何做我想要的同步.
Result r = TryGetAuthResultFromFile();
if(r != null)
{
return r;
}
r = GetAuthResultFromWebAuthenticationBroker();
return r;
Run Code Online (Sandbox Code Playgroud)
问题是TryGetResultFrom文件是async Task<Result>方法,返回r的方法正在返回IAsyncOperation<Result>
我已经尝试过这个(这不是完整的代码,但可以看到理论,在延续中处理结果并返回它们,我必须对IAsyncOperation类型进行一些结果处理).
TryGetAuthResultFromFile().ContinueWith(x=>
{
if(x.Result != null)
{
return x.result;
}
GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=>
{
return y.Result;
});
});
Run Code Online (Sandbox Code Playgroud)
这个问题是,WebAuthenticationBroker如果没有从UI线程调用它似乎不起作用.它会抛出一个有用的NotImplementedException没有有用的错误消息.
我怎么打电话TryGetAuthResultFromFile然后等待结果,然后打电话GetAuthResultFromWebAuthenticationBroker?
c# task-parallel-library async-await windows-8 windows-runtime
我最近已经从使用ISession直接转换为包装的ISession,工作单元类型模式.
我曾经使用SQL Lite(内存中)测试它.我有一个简单的帮助器类,它配置我的SessionFactory,创建一个ISession,然后使用SchemaExport构建模式,然后返回我的ISession,模式一直存在,直到我关闭会话.我稍微改了一下,以便我现在配置一个SessionFactory,创建一个ISession,构建模式,并将工厂传递给我的NHibernateUnitOfWork并将其返回给我的测试.
var databaseConfiguration =
SQLiteConfiguration.Standard.InMemory()
.Raw("connection.release_mode", "on_close")
.Raw("hibernate.generate_statistics", "true");
var config = Fluently.Configure().Database(databaseConfiguration).Mappings(
m =>
{
foreach (var assembly in assemblies)
{
m.FluentMappings.AddFromAssembly(assembly);
m.HbmMappings.AddFromAssembly(assembly);
}
});
Configuration localConfig = null;
config.ExposeConfiguration(x =>
{
x.SetProperty("current_session_context_class", "thread_static"); // typeof(UnitTestCurrentSessionContext).FullName);
localConfig = x;
});
var factory = config.BuildSessionFactory();
ISession session = null;
if (openSessionFunction != null)
{
session = openSessionFunction(factory);
}
new SchemaExport(localConfig).Execute(false, true, false, session.Connection, null);
UnitTestCurrentSessionContext.SetSession(session);
var unitOfWork = new NHibernateUnitOfWork(factory, new NHibernateUTCDateTimeInterceptor());
return unitOfWork;
Run Code Online (Sandbox Code Playgroud)
在内部,NHibernateUnitOfWork需要获取用于创建模式的ISession,或者内存数据库实际上不具有模式,因此这是它调用以获取ISession的方法.
private ISession GetCurrentOrNewSession() …Run Code Online (Sandbox Code Playgroud) 我正在使用该[DllImport]属性将本机DLL导入我的应用程序,但它加载的DLL不在本地bin文件夹中.它是从系统的其他地方加载的,但我无法解决问题.
它适用于我的开发机器,但不适用于干净机器.
我启用了Fusion日志记录,只显示了托管程序集.
我已经使用Sysinternals Process Explorer转储了这个进程,并告诉我它已进入C:\Windows\System32但我无法在Windows资源管理器中看到该文件.
值得注意的是,我正在运行64位Windows 7,但DLL只支持x86,所以我不得不强迫我的应用程序做x86.是否有某种重定向会改变从哪里加载x86文件?
DllImport是一款定制的Silicon Labs USB驱动程序.[的DllImport( "SiUSBXp.dll")]
我还使用命令提示符dir si*在System32文件夹中执行a ,文件不存在.
我正在尝试执行一些自定义SQL来检索Symfony应用程序中的一些模型对象.我在网上找到了该说这样的事情,让我来执行查询虽然不填充模型上的教程(填充模式是不是一个大问题,它只是一个只读数据).
$pdo = Doctrine_Manager::getInstance()->connection()->getDbh();
$pdo->prepare("SELECT * from something complicated");
$pdo->execute();
$this->sensorReadings = $pdo->fetchAll();
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
Fatal error: Call to undefined method PDO::execute()
in sfproject/apps/frontend/modules/site/actions/actions.class.php
Run Code Online (Sandbox Code Playgroud) 在我的MVVM应用程序中,我的视图模型调用3种不同的服务方法,将每种数据转换为通用格式,然后使用属性通知/可观察集合等更新UI.
服务层中的每个方法都会启动一个新方法Task并返回Task到视图模型.这是我的一种服务方法的示例.
public class ResourceService
{
internal static Task LoadResources(Action<IEnumerable<Resource>> completedCallback, Action<Exception> errorCallback)
{
var t = Task.Factory.StartNew(() =>
{
//... get resources from somewhere
return resources;
});
t.ContinueWith(task =>
{
if (task.IsFaulted)
{
errorCallback(task.Exception);
return;
}
completedCallback(task.Result);
}, TaskScheduler.FromCurrentSynchronizationContext());
return t;
}
}
Run Code Online (Sandbox Code Playgroud)
这是调用代码和视图模型的其他相关部分......
private ObservableCollection<DataItem> Data = new ObservableCollection<DataItem>();
public ICollectionView DataView
{
get { return _dataView; }
set
{
if (_dataView != value)
{
_dataView = value;
RaisePropertyChange(() => DataView);
}
}
} …Run Code Online (Sandbox Code Playgroud) 在我的OData控制器中,我将我的EF实体转换为DTO,因为该实体包含许多UI未使用的字段.
这个问题和答案(ASP.NET WebApi对DTO的OData支持)显示了如何将查询选项从OData URI应用到EF查询并返回DTO.这很好,这意味着我可以获得查询数据库的好处以及序列化较小实体的好处.
但是,当我需要更新时,如何将带有修补字段的Delta应用于我的实体?
实体中的字段名称与DTO不匹配.
我可以使用Delta中已更改的字段集合,但之后我将映射所有字段名称并使用反射来更新实体中的所有属性.
有没有更好的办法?
我应该使用我的实体而不是DTO,并使用odata $ select参数来减少线上数据的大小.
我是否应该恢复到WebAPI并具有单独的更新函数,这些函数仅采用所需的参数,例如UpdateStartDate(int id,DateTime newStartDate)
我的FileAppender无法正常工作.它可能不是权限,因为我是本地管理员.
我启用了内部调试,我没有从log4net获得任何错误或异常.
我的配置文件如下.谢谢
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="C:\log-file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
记录的代码是有效的: -
public class Logger
{
private static readonly ILog defaultLog;
static Logger()
{
BasicConfigurator.Configure();
defaultLog = LogManager.GetLogger("default");
}
public static void Log(string errorMessage, Exception …Run Code Online (Sandbox Code Playgroud) 标题说明了一切.我发现了几个不同方式的博客(将EF模型序列化为XML,然后再次反序列化为IEdmModel),但它们都基于旧版本的OData包.
c# ×4
.net ×2
odata ×2
wpf ×2
async-await ×1
decorator ×1
dllimport ×1
doctrine ×1
localization ×1
log4net ×1
mvvm ×1
nhibernate ×1
nhibernate-3 ×1
php ×1
symfony-1.4 ×1
symfony1 ×1
usb ×1
windows-8 ×1
xaml ×1