C# MVVMCross动态构建通用IMvxLog<;T>;用于依赖项注入
我正试图让Mvx以与Microsoft日志记录相同的方式工作,例如通过注入实现ILogger,但陷入困境 我扩展了界面:C# MVVMCross动态构建通用IMvxLog<;T>;用于依赖项注入,c#,dependency-injection,mvvmcross,C#,Dependency Injection,Mvvmcross,我正试图让Mvx以与Microsoft日志记录相同的方式工作,例如通过注入实现ILogger,但陷入困境 我扩展了界面: public interface IMvxLog<T> : IMvxLog { } 公共接口IMvxLog:IMvxLog{ } 在我的LoginView模型中,我希望注入以下内容: public LoginViewModel(IMvxLog<LoginViewModel> loggger) { } public LoginViewModel(
public interface IMvxLog<T> : IMvxLog {
}
公共接口IMvxLog:IMvxLog{
}
在我的LoginView模型中,我希望注入以下内容:
public LoginViewModel(IMvxLog<LoginViewModel> loggger) { }
public LoginViewModel(IMvxLog loggger){
然后我想我可以通过在App.cs中使用以下内容来动态构建:
var logProvider = Mvx.IoCProvider.Resolve<IMvxLogProvider>();
Mvx.IoCProvider.LazyConstructAndRegisterSingleton(typeof(IMvxLog<>), () => logProvider.GetLogFor<>());
var logProvider=Mvx.IoCProvider.Resolve();
lazyconstructionandregistersingleton(typeof(IMvxLog),()=>logProvider.GetLogFor());
它不起作用,因为我没有要传递给委托的类型参数
使用泛型方法组“GetLogFor”需要1个类型参数
如何做到这一点?您在那里做的是不允许的,Mvx注册此类注入的方式是使用开放泛型
typeof(IFoo)
您只需在MvxLog
实现中包装提供程序GetLogFor
,并在其中调用相同的方法,即可完成所需操作:
公共接口IMvxLog:IMvxLog
{
}
公共类MvxLog:IMvxLog
{
私有只读IMvxLog\u登录实现;
公共MvxLog(IMvxLogProvider提供程序)
{
_logImplementation=provider.GetLogFor();
}
公共布尔ISLOGLEVEL已启用(MvxLogLevel logLevel)
{
return\u logImplementation.IsLogLevelEnabled(logLevel);
}
公共bool日志(MvxLogLevel logLevel,Func messageFunc,Exception Exception=null,params object[]formatParameters)
{
返回_logImplementation.Log(logLevel、messageFunc、exception、formatParameters);
}
}
然后你只需注册它:
Mvx.IoCProvider.RegisterType(typeof(IMvxLog)、typeof(MvxLog));
然后像这样使用它:
public LoginViewModel(IMvxLog loggger)
{
_记录器=记录器;
}
嗨