我有一些带有一些类和方法的DLL。还有两个应用程序使用它。 一个管理应用程序几乎需要每个方法,而客户端应用程序只需要部分内容。但是它们的大部分都被它们使用。现在我想用管理员的东西和一个与客户端的东西制作一个DLL。
对于这个问题,是否有比使用两个不同的DLL并在每次更改时手动编辑更好的方法?
答案 0 :(得分:6)
通常,您可能不希望在客户端公开管理代码。由于它是一个DLL,该代码只是等待被利用,因为这些方法必然是公开的。更不用说反编译一个.NET DLL是微不足道的,可能会暴露你的管理程序的内部工作,你真的不希望非管理员看到。
最好的,但不一定是“最简单”的事情,如果你想最小化代码重复,就是有3个DLL:
由服务器,客户端和管理客户端组成的项目应该有3-4个库:
答案 1 :(得分:1)
您是否考虑过对公共库使用依赖注入,某种形式的构造函数注入来确定执行期间需要应用的规则。
这是一个非常简单的例子:
public interface IWorkerRule
{
string FormatText(string input);
}
internal class AdminRules : IWorkerRule
{
public string FormatText(string input)
{
return input.Replace("!", "?");
}
}
internal class UserRules : IWorkerRule
{
public string FormatText(string input)
{
return input.Replace("!", ".");
}
}
public class Worker
{
private IWorkerRule Rule { get; set; }
public Worker(IWorkerRule rule)
{
Rule = rule;
}
public string FormatText(string text)
{
//generic shared formatting applied to any consumer
text = text.Replace("@", "*");
//here we apply the injected logic
text = Rule.FormatText(text);
return text;
}
}
class Program
{
//injecting admin functions
static void Main()
{
const string sampleText = "This message is @Important@ please do something about it!";
//inject the admin rules.
var worker = new Worker(new AdminRules());
Console.WriteLine(worker.FormatText(sampleText));
//inject the user rules
worker = new Worker(new UserRules());
Console.WriteLine(worker.FormatText(sampleText));
Console.ReadLine();
}
}
运行时,您将生成此输出。
此消息为*重要*请为此做些什么?
此消息为*重要*请为此做点什么。