是否可以在Windows PowerShell中使用依赖注入(DI)?
我的初步实验表明它不是.如果我尝试在CmdLet中使用构造函数注入,它甚至不会注册自己.换句话说,这是不可能的:
[Cmdlet(VerbsDiagnostic.Test, "Ploeh")]
public class PloehCmdlet : Cmdlet
{
public PloehCmdlet(IFoo foo)
{
if (foo == null)
{
throw new ArgumentNullException("foo");
}
// save foo for later use
}
protected override void ProcessRecord()
{
this.WriteObject("Ploeh");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我添加一个默认构造函数,可以注册和使用CmdLet,但是没有默认构造函数,它根本就不可用.
我知道我可以使用服务定位器来检索我的依赖项,但我认为这是一种反模式,所以不想这样做.
我希望PowerShell API有一些类似于WCF的ServiceHostFactory的'Factory'钩子,但是如果有的话,我找不到它.
什么是在AutoMapper中为Map函数设置模拟预览的最佳方法.
我提取IMapper接口,以便我可以设置该接口的预期.我的映射器有依赖关系,所以我必须将它们传递给映射器.
当我创建2个mapper类实例时会发生什么,有2个不同的依赖实现?我认为两个映射器将使用相同的依赖项实例,因为AutoMapper映射是静态的.或者AutoMapper甚至可能会抛出异常,因为我尝试使用相同的对象设置2个不同的地图.
什么是解决这个问题的最佳方法?
public interface IMapper {
TTarget Map<TSource, TTarget>(TSource source);
void ValidateMappingConfiguration();
}
public class MyMapper : IMapper {
private readonly IMyService service;
public MyMapper(IMyService service) {
this.service = service
Mapper.CreateMap<MyModelClass, MyDTO>()
.ForMember(d => d.RelatedData, o => o.MapFrom(s =>
service.getData(s.id).RelatedData))
}
public void ValidateMappingConfiguration() {
Mapper.AssertConfigurationIsValid();
}
public TTarget Map<TSource, TTarget>(TSource source) {
return Mapper.Map<TSource, TTarget>(source);
}
}
Run Code Online (Sandbox Code Playgroud) 我在Emacs中使用Clojure和Cider REPL.
是否可以在苹果酒REPL中使用多行功能?我怎样才能做到这一点?
我在那里,写一个函数,它接受一个值作为输入,调用该输入的函数,如果结果是Just x,它应该返回x; 否则,它应该返回原始输入.
换句话说,这个功能(我不知道该叫什么):
foo :: (a -> Maybe a) -> a -> a
foo f x = fromMaybe x (f x)
Run Code Online (Sandbox Code Playgroud)
由于它看起来像是一个通用功能,我想知道它是否已经定义,所以我在推特上问过,克里斯艾伦回复说它是ap fromMaybe.
这听起来很有希望,所以我解雇了GHCI并开始尝试:
Prelude Control.Monad Data.Maybe> :type ap
ap :: Monad m => m (a -> b) -> m a -> m b
Prelude Control.Monad Data.Maybe> :type fromMaybe
fromMaybe :: a -> Maybe a -> a
Prelude Control.Monad Data.Maybe> :type ap fromMaybe
ap fromMaybe :: (b -> Maybe …Run Code Online (Sandbox Code Playgroud) 假设有一个ASP.NET MVC应用程序使用Entity Framework 6,代码优先方法和StructureMap作为IoC.
它还使用工作单元模式.以下是代码:
域类
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
IUnitOfWork和DbContext:
public interface IUnitOfWork
{
IDbSet<TEntity> Set<TEntity>() where TEntity : class;
int SaveChanges();
}
public class Sample07Context : DbContext, IUnitOfWork
{
public DbSet<Product> Products { set; get; }
#region IUnitOfWork Members
public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
服务类中的业务逻辑:
public interface …Run Code Online (Sandbox Code Playgroud) c# structuremap asp.net-mvc entity-framework dependency-injection
我正在学习 Haskell 的应用程序。在我看来(我可能错了)该pure功能并不是真正需要的,例如:
pure (+) <*> [1,2,3] <*> [3,4,5]
Run Code Online (Sandbox Code Playgroud)
可以写成
(+) <$> [1,2,3] <*> [3,4,5]
Run Code Online (Sandbox Code Playgroud)
有人可以解释该pure函数提供的显式映射的好处fmap吗?
如果我尝试Pair<A, B>在 C# 中定义以下类,则会出现编译器错误。
public class Pair<A, B>
{
public Pair(A a, B b)
{
this.A = a;
this.B = b;
}
public A A { get; }
public B B { get; }
}
Run Code Online (Sandbox Code Playgroud)
编译器错误是:
Run Code Online (Sandbox Code Playgroud)error CS0102: The type 'Pair<A, B>' already contains a definition for 'A' error CS0102: The type 'Pair<A, B>' already contains a definition for 'B'
相互矛盾的定义在哪里?
通常,可以定义一个与其类型同名的属性,例如:
public Guid Guid { get; }
public Uri Uri { get; }
Run Code Online (Sandbox Code Playgroud)
为什么编译器会抱怨名称A和B …
我在我的应用程序中使用TextWriterTraceListener(System.Diagnostics)来跟踪异常等几件事情......
应用程序在终端服务器上运行,如果有许多用户同时使用它,则侦听器开始在文件名中创建许多带有随机GUID的跟踪文件.
是否存在避免此行为的可能性或变通方法?
我有一个自定义控件DLL.如何以编程方式将这些自定义控件添加到VS2008工具箱?
c# ×4
haskell ×2
.net ×1
applicative ×1
asp.net-mvc ×1
automapper ×1
cider ×1
clojure ×1
controls ×1
curl ×1
emacs ×1
generics ×1
guid ×1
monads ×1
moq ×1
php ×1
powershell ×1
structuremap ×1