我想做一个简单的多种类型注册解决方案(最终注入构造函数,但使用.Resolve来查看Unity是否能够执行此类操作.
在下面的每种情况下,Unity都会解析0应该解决的项目2.
是否有一些团结的转变可以打开2007年后的行为?还是我只是大失所想?
这是我的代码:
public interface IFoo {}
public class Foo1 : IFoo{}
public class Foo2 : IFoo{}
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
container.RegisterType<IFoo, Foo1>();
container.RegisterType<IFoo, Foo2>();
// container.Resolve<IEnumerable<IFoo>>(); returns 0
// container.ResolveAll<IFoo>(); returns 0
var foos = container.Resolve<IFoo[]>();
Console.WriteLine(foos.Count());
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud) 我在创建依赖于两个git repos的TeamCity项目构建时遇到问题.特别是,主要内容中的内容依赖于共享仓库.这不是理想的,需要改变(也就是将所有共享组件推入nuget),但首先要做的事情.
构建机器需要两个兄弟结帐文件夹:"项目"和"共享".然后,从"Project"文件夹中,我想启动一个rake任务.
Teamcity似乎拉出了第一个'Project'仓库,checkout到/ work文件夹然后将其删除并用'Shared'仓库中的结账替换它.
关于如何正确拉动的任何想法?
谢谢,-Steve
我想注册一个在运行时自行解决的通用委托,但是我找不到在通用代理上执行此操作的方法。
给定一个看起来像这样的代表:
public delegate TOutput Pipe<in TInput, out TOutput>(TInput input);
Run Code Online (Sandbox Code Playgroud)
并给一个离散注册的委托,看起来像这样:
public class AnonymousPipe<TInput, TOutput>
{
public Pipe<TInput, TOutput> GetPipe(IContext context)
{...}
Run Code Online (Sandbox Code Playgroud)
我想按照以下方式注册一个函数:
builder.RegisterGeneric(typeof(Pipe<,>)).As(ctx =>
{
var typeArray = ctx.RequestedType.GetGenericArguments();
// this can be memoized
var pipeDefinition = ctx.Resolve(typeof(AnonymousPipe<,>).MakeGenericType(typeArray));
return pipeDefinition.GetPipe(ctx);
Run Code Online (Sandbox Code Playgroud)
我找不到在Autofac中作为参数提供泛型实现的方法-我可能只是缺少了一些东西。我知道我可以通过通用对象或接口来做到这一点,但我想坚持委托的轻巧性。这使得注入这些单元测试超级简单。
有什么想法吗?我现在必须进行离散注册(每个类型组合一个,没有泛型)。