小编ciy*_*n97的帖子

如何使用Xamarin和Autofac将构造函数依赖项注入到ViewModel中?

我有一个ViewModel,我想向它注入另一个类。我将Visual Studio与最新版本的Xamarin一起使用。我正在使用Autofac来注册解析依赖项。但是,我是新手,即使遇到的问题很简单,我仍然无法找到解决方案。

这是我要在其中注入另一个类的类:

public IMessagingCenterWrapper MessagingCenterWrapper;

public LoginViewModel(IMessagingCenterWrapper messagingCenterWrapper){
            MessagingCenterWrapper = messagingCenterWrapper;
        }
Run Code Online (Sandbox Code Playgroud)

然后在应用程序的入口点,我有一个函数来初始化容器,该容器注册并解析依赖项

static IContainer container{ get; set; }

public App ()
        {
            InitializeComponent();

            InitializeIOCContainer();
        }

void InitializeIOCContainer()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<LoginViewModel>();
            builder.RegisterType<MessagingCenterWrapper>().As<IMessagingCenterWrapper>();
            container = builder.Build();

            var wrapper = container.Resolve<IMessagingCenterWrapper>();
            var viewModel = container.Resolve<LoginViewModel>();
        }
Run Code Online (Sandbox Code Playgroud)

但是在登录视图中的行上构建时出现错误:

 BindingContext = new LoginViewModel();
Run Code Online (Sandbox Code Playgroud)

我收到错误消息是因为我没有在调用中初始化参数。

但是,如果这样做,我就不会破坏IoC模式的整个原理。最终,新的类调用将与其他依赖项嵌套在一起,我想避免这种情况。

所以我的问题是:如何实际将class参数注入构造函数中?

c# dependency-injection inversion-of-control autofac xamarin.forms

6
推荐指数
1
解决办法
2053
查看次数

是否可以创建一个未指定方法的返回类型的接口?

我发现很难用英语描述这个,因为它不是我的第一语言所以我希望问题/标题有意义.

我需要知道我是否可以创建一个可以返回实现中任何类型的方法的接口.

我想制作一个可以注入另一个类的通用映射器.但我想知道我是否可以制作通用映射器,或者我是否需要为不同类型制作不同的接口.对我来说,制作相同但只有不同返回类型的不同接口看起来毫无意义?

有点像这样:

public interface IMapper()
{
    T MapObject() where T = the return type
    List<T> MapList() where T = the return type;
}

public class OrderMapper : IMapper()
{
   OrderDetails MapObject()
   {
      mapping code...
      return OrderDetails;
   }
}

public class CustomerMapper : IMapper()
{
    CustomerDetails MapObject()
    {
        mapping code...
        return CustomerDetails;
    }
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?或者我只是迟钝,我需要制作不同的接口.

c# generics interface

0
推荐指数
1
解决办法
47
查看次数