【发布时间】:2018-04-25 04:14:07
【问题描述】:
这应该很简单,但我找不到任何东西。
我在一个程序集中有一个类(一个共享库——它是一组 Web 服务的代理类) 我在另一个程序集(网络项目)中有一个类
代理程序集中有一个名为“Profile”的类。 在 Web 项目中有一组“使用”配置文件的类。 当没有用户登录时,使用 GenericProfile。
遵循“关注点分离”的原则...... 代理程序集由其他项目使用,并且只关心 Web 服务的东西。 该网络项目只是在其中包含网络内容
但是,现在需要“GenericProfile”——将其视为“Guest User”。
合乎逻辑的做法是构建一个名为 IProfile 的接口并让两个类都派生自它。但这会在两个程序集之间产生循环依赖。
下一个最佳想法是创建一个名为 MyInterfaces 的第三个程序集并将 IProfile 放入其中 - 但在我看来,这会导致违反关注点分离原则。至少,这个问题的一个实例似乎太小了,不足以在我的解决方案中创建一个额外的模块。
输入包装类——或者复合包装类(随便你怎么称呼它)
我正在寻找最终生成如下内容的内容。是否有工具或 Visual Studio 扩展可以做到这一点?也许是一个 .tt 文件?
namespace WebProject
{
public interface IProfile
{...}
class MyWrapperClass : IProfile
{
Proxy.Profile _profile;
public MyWrapperClass(Proxy.Profile proxy)
{
_profile = proxy;
}
public string IProfile.Property1{ get { return _profile.Property1; } set { _profile.Property1 = value; } }
public string IProfile.Property2{ get { return _profile.Property2; } set { _profile.Property2 = value; } }
public string IProfile.Property3{ get { return _profile.Property3; } set { _profile.Property3 = value; } }
}
}
【问题讨论】:
-
好像有人问过类似的问题...stackoverflow.com/questions/2150416/…
-
虽然我没有 ReSharper...
-
我会为此使用 T4(正如您所想的那样),但我不知道是否已经有一个完整的模板用于此。但我认为使用反射可以很容易地编写这样的模板。
标签: c# visual-studio