c#封装了项目引用

本文关键字:引用 项目 封装 | 更新日期: 2023-09-27 18:06:31

假设我有项目P1, P2和P3。

P2引用P1,它的类使用P1的类。同时P3引用P2,它的类使用P2的类,而P2的类又使用P1的类。

要使其工作,我需要在P3中引用P1和P2。是否有任何方法可以将P1的类封装到P2(因此P3只需要引用P2)?

c#封装了项目引用

可能是因为你的项目P3使用了P1的类型?因为在下面的例子中,当P2类型在内部使用P1的类型时,一切都工作得很好。或者只是另一种选择:您可以将公共模型提取到单独的库中。

假设下一个是P1

public class P1_Model {
    public string Name {
        get { return "1"; }
    }
}
public class P1_Service {
    public static P1_Model Execute() {
        return new P1_Model();
    }
}

和P2

public class P2_Service {
    public static P2_Model Execute() {
        var p1Model = P1_Service.Execute();
        return new P2_Model(p1Model);
    }
    public class P2_Model {
        public P2_Model(P1_Model p1Model) {
            Model = p1Model;
        }
        public string Name {
            get { return Model.Name; }
        }
        public P1_Model Model { get; }
    }
}

P3

var p2Model = P2_Service.Execute();
Console.WriteLine(p2Model.Name); //works fine. No Reference to P1 needed
Console.WriteLine(p2Model.Model.Name); // requires P1 reference from P3

根据您的确切需求,您还可以考虑使用ILMerge将多个程序集合并为一个程序集。

您不必在p3中引用p1,因为只有p2使用p1的类。您只需要在项目中部署p1库和p2库。大多数情况下,visual studio会为你做这些。你只需要在p3中引用p2就可以了。