ist
So Registrierung zuerst: vom docs
builder.RegisterGeneric(typeof(NHibernateRepository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
So Ihr Code
builder.RegisterGeneric(typeof(LoggerService<>))
.As(typeof(ILogger<>))
.InstancePerLifetimeScope();
Hier ist mein Arbeitsprobe:
using System;
using Autofac;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(LoggerService<>))
.As(typeof(ILogger<>))
.InstancePerLifetimeScope();
var container = builder.Build();
var obj = container.Resolve<ILogger<MyService>>();
var obj2 = container.Resolve<ILogger<OtherService>>();
Console.WriteLine(obj.Log());
Console.WriteLine(obj2.Log());
}
}
public interface ILogger<T>
{
string Log();
}
public class LoggerService<T> : ILogger<T>
{
public string Log()
{
return typeof(T).Name;
}
}
public class MyService
{
}
public class OtherService
{
}
Ausgänge:
Hallo Welt
MyService
OtherService
Sie tun 'öffentlichen MyService (ILogger Logger)'. Aber das scheint zu sein, als hättest du eine seltsame Logging-Klasse. –
Kannst du es nicht auch für 'ILogger' registrieren? Ich bezweifle, Autofac wird automatisch Ihre 'ILogger' Registrierung verwenden, nur weil es diese Schnittstelle erweitert. –
'builder.RegisterGeneric (typeof (SomeInstance1 <>)) .As (typeof (IGenericInterface <>))' –