基于现有标准解决方案的 Xamarin Forms 解决方案

Xamarin Forms Solution based on existing standard solution

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

标准溶液 项目 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 始终为 null。

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

我们如何使用标准的 Xamarin 表单解决方案并使用第二个 repository/2nd 解决方案扩展它,并使用某种形式的注入来使用额外的项目。

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

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

如何最好地解决此类问题?

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

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

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>