Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVMCross动态构建通用IMvxLog<;T>;用于依赖项注入_C#_Dependency Injection_Mvvmcross - Fatal编程技术网

C# MVVMCross动态构建通用IMvxLog<;T>;用于依赖项注入

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(

我正试图让Mvx以与Microsoft日志记录相同的方式工作,例如通过注入实现ILogger,但陷入困境

我扩展了界面:

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)
{ 
_记录器=记录器;
}