首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin表单w/ Mobile绑定--如何为Android / iOS项目中定义的类指定Blazor应用程序中的依赖项注入

Xamarin表单w/ Mobile绑定--如何为Android / iOS项目中定义的类指定Blazor应用程序中的依赖项注入
EN

Stack Overflow用户
提问于 2021-08-19 23:23:35
回答 1查看 66关注 0票数 0

在我的Blazor应用程序中,我试图确定安卓或iOS设备的可用存储量。

我在这里找到了一个相关的答案:

Can I check available storage in the Device on Xamarin Forms?

根据已获接受的答案,我已实施以下措施:

定义Blazor项目中的接口

代码语言:javascript
复制
public interface IStorage
{
    double GetRemainingStorage();
}

在Android项目中创建了一个类。

代码语言:javascript
复制
[assembly: Xamarin.Forms.Dependency(typeof(AndroidStorageManager))]

namespace MyApp.Android
{
    public class AndroidStorageManager : IStorage
    {
        public double GetRemainingStorage()
        {
            var freeSpace = Android.OS.Environment.ExternalStorageDirectory.UsableSpace;

            return freeSpace;
        }
    }
}

在iOS项目中创建一个类

代码语言:javascript
复制
[assembly: Xamarin.Forms.Dependency(typeof(iOSStorageManager))]

namespace MyApp.iOS
{
    public class iOSStorageManager : IStorage
    {
        public double GetRemainingStorage()
        {
            var freeSpace = NSFileManager.DefaultManager.GetFileSystemAttributes(Environment.GetFolderPath(Environment.SpecialFolder.Personal)).FreeSize;

            return freeSpace;
        }
    }
}

问题

尽管使用[assembly:属性定义了依赖项,但当我的Blazor应用程序试图注入IStorage实例时,它会抛出一个异常:

无法解析“IStorage”类型的服务。

当然,我无法在启动时定义IService的依赖项注入,因为AndroidStorageManager和iOSStorageManager是在设备特定的项目中定义的,这些项目已经引用了Blazor应用程序。

我怀疑我需要在安卓和iOS应用程序中为iOS定义DI的其他方法,但我看不出该如何做。

有人能给我建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-20 09:59:37

我似乎已经找到了解决我眼前问题的办法,但我确信肯定会有一个更优雅的解决方案。

当试图注入与IStorage接口关联的类的实例时,会生成异常。

代码语言:javascript
复制
public class MyManager {

    private IStorage _storage;

    public MyManager(IStorage storage) {
        _storage = storage;
    }

    ...
}

我可以使用Xamarin.Forms DI手动注入一个实例,而不是依赖Blazor来解决这个依赖关系,如下所示:

代码语言:javascript
复制
public class MyManager {

    private IStorage _storage;

    public MyManager() {
        _storage = DependencyService.Get<IStorage>();
    }

    ...
}

我假设我的原始代码无法工作,因为Xamarin.Forms和Blazor没有共享同一个DI容器。我没有把握。

我对任何能提出更优雅的解决方案的人都感兴趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68855428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档