У меня возникли проблемы с разрешением Fofss от Autofac (версия 3.0.2). Почему Autofac может возвращать Funcs для типов, которые он не может решить? Кажется, Autofac выполняет разрешение зависимостей при выполнении func, которое кажется неправильным и должно выполняться при создании Func (не создавая тип Foo
, но гарантируя, что его конструктор может быть вызван с известными зарегистрированными типами).Autofac Func Resolution
using System;
using Autofac;
using NUnit.Framework;
namespace AutofacTest
{
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<Foo>().AsSelf().AsImplementedInterfaces();
var container = builder.Build();
//var foo = container.Resolve<IFoo>(); //Throws because the int arg can't be resolved (as it should)
Assert.True(container.IsRegistered<Func<int, IFoo>>()); //This is valid and makes sense
var fooFunc = container.Resolve<Func<int, IFoo>>();
var foo = fooFunc(9);
//Assert.False(container.IsRegistered<Func<string, IFoo>>()); //Why is this true?
var badFooFunc = container.Resolve<Func<string, IFoo>>(); // Why doesn't Autofac throw here?
var badFoo = badFooFunc(string.Empty); // Autofac throws here
}
}
interface IFoo { }
public class Foo : IFoo
{
public string ArgStr { get; set; }
public Foo(int arg)
{
this.ArgStr = arg.ToString();
}
}
}
Этот тип вопросов: например, почему что-то реализовано тем или иным способом, не подходит для SO ... вам лучше спросить об этом в группе обсуждения: https://groups.google.com/forum/#! forum/autofac – nemesv
Это вопрос использования, и в соответствии с группой: «Если у вас есть вопрос использования/поддержки, мы бы предпочли вам описать его и использовать тег« autofac »в Stack Overflow» – smith324
Что вы пытаясь достичь? –