我正在试图找出一个正确的方法来注入一个需要参数的自动工厂,或者即使这可以通过Unity实现.
例如,我知道我可以这样做:
public class TestLog
{
private Func<ILog> logFactory;
public TestLog(Func<ILog> logFactory)
{
this.logFactory = logFactory;
}
public ILog CreateLog()
{
return logFactory();
}
}
Container.RegisterType<ILog, Log>();
TestLog test = Container.Resolve<TestLog>();
ILog log = test.CreateLog();
Run Code Online (Sandbox Code Playgroud)
现在我希望能做的是:
public class TestLog
{
private Func<string, ILog> logFactory;
public TestLog(Func<string, ILog> logFactory)
{
this.logFactory = logFactory;
}
public ILog CreateLog(string name)
{
return logFactory(name);
}
}
Container.RegisterType<ILog, Log>();
TestLog test = Container.Resolve<TestLog>();
ILog log = test.CreateLog("Test Name");
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.我可以看到你如何设置自定义工厂来在Unity中创建实例,似乎无法为这个例子提供任何明确的例子.
显然我可以创建自己的工厂,但我正在寻找一种优雅的方式在Unity中以最少的代码执行此操作.
我正在使用包含单个类的Reflection.Emit生成动态程序集.我有一个导致BadImageException的错误.要解决这个问题,我需要查看已编译的代码,因此我将动态程序集保存到磁盘.
我已经尝试过PEVerify反对程序集,它似乎认为没有错误.我现在想在Reflector中查看生成的代码,但程序集显示为空(我知道它不是).
知道为什么会这样吗?
var assemblyName = new AssemblyName("An.Assembly");
var appDomain = Thread.GetDomain();
var assemblyBuilder = appDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
var typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public | TypeAttributes.Class);
...
typeBuilder.CreateType();
assemblyBuilder.Save("temp.dll");
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我已经在使用Relection.Emit反射器的插件,这对这个问题没有帮助.
有没有人知道需要安装的组件才能Package通过MSBuild 使目标可用.
可以Package在安装了Visual Studio的计算机上使用MSBuild,但不能在仅安装了.NET 4 SDK和Web Deploy 2.0的构建服务器上使用,这会导致以下错误:
msbuild "Package" does not exist in the project.
Run Code Online (Sandbox Code Playgroud)
部分归结为服务器上的以下丢失文件:
c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\*.*
Run Code Online (Sandbox Code Playgroud)
这当然可以通过将MSBuild VisualStudio文件夹的内容复制到构建服务器上的等效目录来解决,但这不是服务器配置的可管理解决方案.
我读过的所有答案都涉及安装Visual Studio或复制文件.当然可以在不安装Visual Studio的情况下编译Web Deploy包吗?
我正在使用Prism MVVM框架在WPF中实现数据验证.我在ViewModel中使用干净的数据实体,这些实体被绑定到表示层.
<TextBox Text="{Binding User.Email, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
我在基础ViewModel类中实现了IDataErrorInfo的通用实现,该类对我的Entity上的DataAnnotation属性运行验证(在本例中为User).
问题是当绑定到实体时,WPF框架在实体上查找IDataErrorInfo而不是ViewModel,这是我希望这个逻辑存在的地方.如果我用我的ViewModel中的属性包装我的实体,那么一切正常,但我不希望在ViewModel中使用实体.
有没有办法告诉WPF在ViewModel中查找IDataErrorInfo而不是绑定的子对象?
谢谢,迈克
如果我有名为codeText的字符串.有时该字符串以a开头,<p>有时则不开始.任何人都可以告诉我如何检查它是否开始,<p>如果没有,那么我如何添加<p>到开始和</p>结束.