【问题标题】:Xamarin Forms Solution based on existing standard solution基于现有标准解决方案的 Xamarin Forms 解决方案
【发布时间】:2019-10-04 09:46:42
【问题描述】:

我正在寻找一种方法来扩展具有自己的 git 存储库的工作标准 Xamarin Forms 解决方案和另一个客户特定的解决方案,应该有自己的项目作为解决方案的额外内容。

标准解决方案 项目 UWP 机器人 IOS 应用程序(.net 标准) 核心(.net 标准)

新解决方案应使用现有解决方案。 客户解决方案 添加现有(项目) UWP 机器人 IOS 应用程序(.net 标准) 核心(.net 标准)

当只添加原始项目时,一切都按预期工作。 那么如何将自定义项目和逻辑添加到新解决方案中。

我希望使用类似的方法将项目添加到客户解决方案中。 一些在启动期间注入或发现 ICustomerProjectAdapter。 我试过了

[assembly: Xamarin.Forms.Dependency(typeof(CustomTemplateAdapter))]
namespace CustomTemplate
{
    public class CustomTemplateAdapter : ICustomerProjectAdapter
    {
        public string Test { get { return "HELLO WORLD - Custom Template";}  }
    }
}

但这不起作用 CustomerProjectAdapter 始终为空。

var CustomerProjectAdapter = DependencyService.Get<ICustomerProjectAdapter>();

我们如何使用标准的 Xamarin 表单解决方案并使用第二个存储库/第二个解决方案对其进行扩展,并通过某种形式的注入来使用额外的项目。

每个客户解决方案都会使用此流程。 我不想将客户特定的代码添加到主存储库中。 使用客户特定的配置或具有客户特定的部分 在 csproj 文件中就可以了。在代码级别,如果限制单个注入点,也可以添加客户部分。

我还尝试使用预编译时脚本添加对 MAIN cs.proj 的引用。 这导致在解决方案之间切换时在 Visual Studio 中未找到错误。 .但是即使在编译时更改了 csproj,发现/注入问题仍然没有解决。

我如何最好地解决这类问题?

【问题讨论】:

  • 你应该在特定平台上实现接口。并在 share project 中调用 Test 方法。 var CustomerProjectAdapter = DependencyService.Get&lt;ICustomerProjectAdapter&gt;().Test();
  • @Lucas Zhang 平台特定模块在主解决方案中。当然,我可以为每个平台 * 客户数量添加一个客户版本。但这正是我试图避免的。不触及主要解决方案。如何使用第二个解决方案和第二个存储库扩展现有解决方案。

标签: c# xamarin.forms solution


【解决方案1】:

因此,如果有人正在寻找这样的解决方案,我会在项目文件中找到工作条件。它很好地解决了这个问题。

对客户代码或项目的唯一妥协和引用仅限于一个项目,并且仅在 csproj 文件中。我们有一个门面项目负责返回驻留在另一个项目中的自定义适配器的实例。该项目在构建时被引用。

VS 内部的编译和语法检查都基于当前打开的解决方案。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

<Choose>
  <When Condition="'$(SolutionName)' == 'MyCustomSolution' ">
    <ItemGroup>
      <ProjectReference Include="..\..\XPC_CustomRepos\CUSTOMERn\Customern.csproj">
        <Name>XYZ.CustomAdapter</Name>
      </ProjectReference>
    </ItemGroup>
  </When>

<!-- Repeat for each custom solution -->

  <Otherwise>
    <ItemGroup>
      <ProjectReference Include="..\STANDARD.Adapter\XYZ.Adapter.csproj">
        <Name>XYZ.Standard</Name>
      </ProjectReference>
    </ItemGroup>
  </Otherwise>  

</Choose>

</Project>

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多