第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 Autofac 從 Factory 解析接口

使用 Autofac 從 Factory 解析接口

C#
Smart貓小萌 2023-04-29 10:13:29
我是 Autofac 的新手,正在嘗試使用工廠解析接口,但似乎無法在文檔中找到相關(guān)部分來使它正常工作。我有以下接口來抽象日志記錄實(shí)現(xiàn):public interface ILog{    void Info(string message);    void Debug(string message);    void Error(string message, Exception exception = null);}public interface ILogFactory{    ILog GetLogger(Type type);}然后是這些接口的以下實(shí)現(xiàn):public class Log : ILog{    private readonly Action<string> _logDebug;    private readonly Action<string, Exception> _logError;    private readonly Action<string> _logInfo;    public Log(Action<string> logInfo, Action<string> logDebug, Action<string, Exception> logError)    {        _logDebug = logDebug;        _logInfo = logInfo;        _logError = logError;    }    public void Debug(string message)    {        _logInfo(message);    }    public void Error(string message, Exception exception = null)    {        _logError(message, exception);    }    public void Info(string message)    {        _logInfo(message);    }}public class Log4NetLogFactory : ILogFactory{    public Log4NetLogFactory()    {        XmlConfigurator.Configure();    }    public ILog GetLogger(Type type)    {        var logger = LogManager.GetLogger(type);        return new Log(logger.Info, logger.Debug, logger.Error);    }}我對(duì)如何使用 ILogFactory 解析 Autofac 中的 ILog 感到困惑。我已經(jīng)為 ILogFactory 注冊(cè)了一個(gè)單例:builder.RegisterType<Log4NetLogFactory>().As<ILogFactory>().SingleInstance();但我不確定如何使用傳入調(diào)用方類型的 ILogFactory 的 GetLogger 方法來解析 ILog 接口??磥砦倚枰@樣的事情:builder.Register((c, p) => c.Resolve<ILogFactory>().GetLogger(??Caller Type Here??)).As<ILog>();但我不確定如何將調(diào)用者類型放入 GetLogger 構(gòu)造函數(shù)中。
查看完整描述

1 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是我最終得到的模塊:

public class LoggingModule : Module

{

? ? protected override void Load(ContainerBuilder builder)

? ? {

? ? ? ? builder.RegisterType<Log4NetLogFactory>().As<ILogFactory>().SingleInstance();

? ? ? ? builder.Register((c, p) => c.Resolve<ILogFactory>().GetLogger(p.TypedAs<Type>()));

? ? }


? ? protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration)

? ? {

? ? ? ? registration.Preparing +=

? ? ? ? ? ? (sender, args) =>

? ? ? ? ? ? {

? ? ? ? ? ? ? ? var forType = args.Component.Activator.LimitType;


? ? ? ? ? ? ? ? var logParameter = new ResolvedParameter(

? ? ? ? ? ? ? ? ? ? (p, c) => p.ParameterType == typeof(ILog),

? ? ? ? ? ? ? ? ? ? (p, c) => c.Resolve<ILog>(TypedParameter.From(forType)));


? ? ? ? ? ? ? ? args.Parameters = args.Parameters.Union(new[] { logParameter });

? ? ? ? ? ? };

? ? }


}

這可以在容器中注冊(cè):


builder.RegisterModule(new LoggingModule());


查看完整回答
反對(duì) 回復(fù) 2023-04-29
  • 1 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)