У меня есть вопрос об Autofac: Как получить имя класса, запрашивающего экземпляр из контейнера?Autofac - Как получить имя класса при создании экземпляра
Возможно ли получить имя класса «Autofac_Test», переданного в конструктор autofac при создании объекта?
Мой код:
using System;
using System.Diagnostics;
using System.Reflection;
using Autofac;
using Xunit;
public class BootStrap
{
public IContainer Configure()
{
var builder = new ContainerBuilder();
builder.Register(b => new MyLogger(MethodBase.GetCurrentMethod().ReflectedType)).As<ILog>();
return builder.Build();
}
}
public class Autofac_Test
{
private IContainer _containter;
public Autofac_Test()
{
_containter = new BootStrap().Configure();
}
[Fact]
public void Should_create_class_with_Name_BlaBla()
{
var logger = _containter.Resolve<ILog>();
Assert.True(logger.Name == "Autofac_Test");
}
}
public class MyLogger : ILog
{
public string Name { get; private set; }
public MyLogger(Type name)
{
Name = name.FullName;
}
public void Info(string message)
{
Debug.WriteLine(string.Format("{0} {1}", Name, message));
}
}
public interface ILog
{
void Info(string message);
string Name { get; }
}
Верно ли, что вы не можете/не хотите рассмотреть решения какой-нибудь ILogFactory вместо или обеспечить этот тип в качестве параметра вручную (так как вы используя локатор обслуживания здесь)? – Igor
Возможно, я должен подумать, что вы сказали ... спасибо за помощь ... – Ruuteek