.net - 我可以将可移植类库中的类或方法限制为特定平台吗?

标签 .net portable-class-library

我正在创建一个可移植类库并面向 .Net 4.5、Windows 8、Windows Phone 8.1 和 Windows Phone Silverlight 8。

我可以将类或方法限制为特定目标吗?就像只能从 .Net 4.5 项目调用方法一样,而不能从 Windows Phone 8.1 项目调用。

这可能吗?

最佳答案

使用 Dependency Injection 是可行的.

例如,您可以使用 Ninject 的上下文绑定(bind)注入(inject)适当的类型实现,以便此方法调用不执行任何操作,而另一个实现则执行预期的操作。

public abstract class MyBaseClass {
    public abstract void MyMethod() { }
}

public class MyDerivedDotNet45Class : MyBaseclass() {
    public override void MyMethod() { // Does something... }
}

public class MyDerivedWindowsPhoneClass : MyBaseClass() {
    public override void MyMethod() { // Does nothing... }
}

public class MyWorkingProcessClass {
    public MyWorkingProcessClass(MyBaseClass baseClass) {
        dependency = baseClass;
    }

    public void MethodThatShallDoSomethingOnlyWhenDotNet45() {
        dependency.MyMethod();
    }

    private readonly MyBaseClass dependency;
}

因此,根据您注入(inject)的类,您的程序要么执行某些操作,要么不执行任何操作。

.Net 4.5下

var workingClass = new MyWorkingProcessClass(new MyDerivedDotNet45Class());
wokringClass.MethodThatShallDoSomethingOnlyWhenDotNet45();

这将执行派生类中所述的操作。

在 Windows Phone 下

var workingClass = new MyWorkingProcessClass(new MyDerivedWindowsPhoneClass());
workingClass.MethodThatShallDoSomethingOnlyWhenDotNet45();

这不会执行派生类中所述的任何操作。

使用 Ninject

This answer提供了一个使用Contextual Binding的好例子.

这是在 Composition Root 中您应该构建对象组合,以便它知道在何时何地注入(inject)什么。

关于.net - 我可以将可移植类库中的类或方法限制为特定平台吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556379/

相关文章:

.net - 有人试过 FastReport .Net 吗?

c# - Xamarin 表格 : Left Side Outline Border on image

c# - .Net 2015 带有黄色三角形的引用资料,用于可移植库上的 Nuget 包

c# - 无法在 ASP.NET MVC 中运行 SQLite.net PCL

out-of-memory - HttpClient Head请求内存异常PCL

Xamarin 共享库和 PCL

.net - .Net Thread.Suspend已过时。寻找替代品

c# - 在应用程序中托管WCF服务

java - 如何以编程方式根据架构验证 JSON 字符串?

c# - 如何在运行时添加 ActiveX 控件