, Каким образом?
, поскольку это - то, что говорят все книги. Как шаблоны GoF, многие люди видят его как универсально хороший и никогда не думают о том, является ли это действительно правильным дизайном.
, Как Вы знаете все отношения между объектами, которые произойдут в том интерфейсе?
Вы не делаете, и это - проблема.
, Если Вы уже знаете те отношения, тогда почему не только расширяют абстрактный класс?
Причины не расширить абстрактный класс:
, Если ни один не применяется, идите вперед и используйте абстрактный класс. Это сохранит Вас много времени.
Вопросы Вы не спросили:
, Что оборотные стороны использования являются интерфейсом?
Вы не можете изменить их. В отличие от абстрактного класса, интерфейс установлен в камне. Как только у Вас есть одно используемое, расширение его повредит код, период.
мне действительно нужно также?
Большую часть времени, нет. Думайте действительно трудно перед созданием любой иерархии объектов. Большая проблема на языках как Java состоит в том, что он делает слишком легким создать крупные иерархии сложного объекта.
Рассматривают классический пример, который LameDuck наследовал от Утки. Звучит легким, не так ли?
ну, который является, пока Вы не должны указывать, что утка была ранена и является теперь Ламе. Или укажите, что неудачник был излечен и может идти снова. Java не позволяет Вам изменять тип объектов, таким образом с помощью подтипов, чтобы указать, что хромота на самом деле не работает.
Действительно, вам нужно работать с таким кодом
CspParameters _cpsParameter;
RSACryptoServiceProvider RSAProvider;
_cpsParameter = new CspParameters();
_cpsParameter.Flags = CspProviderFlags.UseMachineKeyStore;
RSAProvider = new RSACryptoServiceProvider(1024, _cpsParameter);
Следующим пользователям нужен доступ к папке: C: \ Documents and Settings \ All Users \ Application data \ Microsoft \ Crypto \ RSA \ MachineKeys
Итак, теперь у меня все работает нормально.
Попробуйте установить
System.Security.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore = true;
РЕДАКТИРОВАТЬ: Затем попробуйте использовать
var provider = new System.Security.Cryptography.RSACryptoServiceProvider();
вместо конструктора с целочисленным параметром. Этот конструктор пытается сгенерировать ключ с указанной длиной ключа, и вы, возможно, не сможете сделать это с вашими разрешениями.
Я исправил это, установив для параметра "Загрузить профиль пользователя" значение "Истина" (было неверно) в разделе Advanced Settings / Process Model пула приложений.
Приложение отлично работало на Server 2003 R2 / IIS 6, и проблема появилась, когда я настраивал его на нашем новом сервере 2008 R2.
Есть идея попробовать это на:
http://social.msdn.microsoft.com/forums/en-US/clr/thread/7ea48fd0-8d6b-43ed-b272-1a0249ae490f/
YMMV
Я просто хотел прокомментировать, что решение Расмуса Фабера сработало для меня (с одним незначительным изменением):
System.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore = true;
RSACryptoServiceProvider provider = new System.Cryptography.RSACryptoServiceProvider();
Я пытался заставить MailBee.net подписывать исходящее сообщение с помощью DKIM и получил то же сообщение, что и ОП. Конечно, на моей машине разработчика все было хорошо, но при загрузке на клиентский веб-хост я столкнулся с этой проблемой. Как я уже сказал, приведенное выше решение сработало для меня, в то время как другие, которые я нашел в Интернете (включая ссылку на форум msdn выше), нет.
(Я бы проголосовал за и прокомментировал, но у меня недостаточно репутации для этого.: P)
Спасибо, Расмус Фабер!